两个一维数组求邻接矩阵
时间: 2024-04-17 12:20:52 浏览: 122
邻接矩阵是一种常见的图的表示方法,可以使用两个一维数组来求得邻接矩阵。
首先,需要知道图的顶点个数n。然后,创建一个大小为n的二维数组g,用于表示邻接矩阵。
接下来,根据图的边信息,将对应的位置置为1或者权值。假设有m条边,每条边连接的两个顶点分别为x和y,权值为w,则可以使用以下代码来求得邻接矩阵:
```python
n = 5 # 顶点个数
m = 7 # 边的个数
g = [[0] * n for _ in range(n)] # 创建一个大小为n的二维数组,初始值为0
edges = [(0,1), (0, 2), (1, 2), (1, 3), (2, 3), (2, 4), (3, 4)] # 边的信息
for edge in edges:
x, y = edge
g[x][y] = 1 # 有边的位置置为1
g[y][x] = 1 # 无向图,双向边位置也置为1
print(g)
```
输出结果为:
```
[[0, 1, 1, 0, 0],
[1, 0, 1, 1, 0],
[1, 1, 0, 1, 1],
[0, 1, 1, 0, 1],
[0, 0, 1, 1, 0]]
```
这样就得到了邻接矩阵的表示。
相关问题
C语言用二维数组的邻接矩阵表示图表
可以使用一个二维数组来表示邻接矩阵。假设图中有N个节点,则定义一个N * N的二维数组来表示邻接矩阵。如果节点i和节点j之间有一条边,则邻接矩阵中的第i行第j列的元素为1,否则为0。
以下是一个C语言实现的例子:
```c
#include <stdio.h>
#define MAX_NODES 100
int adjMatrix[MAX_NODES][MAX_NODES];
int main() {
int n, m;
scanf("%d %d", &n, &m); // 输入节点数和边数
for (int i = 0; i < m; i++) {
int a, b;
scanf("%d %d", &a, &b); // 输入边的两个节点
adjMatrix[a][b] = 1; // 标记邻接矩阵中对应位置为1
adjMatrix[b][a] = 1;
}
// 输出邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", adjMatrix[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个例子中,我们首先输入了节点数和边数,然后逐个输入边的两个节点,并标记邻接矩阵中对应位置为1。最后输出整个邻接矩阵。
数组邻接矩阵存取图上的数据
数组邻接矩阵是一种常用的图数据结构,用于表示图中的节点和边的关系。它使用一个二维数组来表示图的连接关系,其中数组的行和列分别对应图中的节点。
在数组邻接矩阵中,数组的行和列表示图中的节点,而数组中的元素表示节点之间的连接关系。如果两个节点之间存在边,则对应位置的元素为1;如果两个节点之间不存在边,则对应位置的元素为0。
通过数组邻接矩阵可以方便地进行图的遍历和查找操作。对于有向图,数组邻接矩阵是一个对称矩阵;对于无向图,数组邻接矩阵一个对称且主对角上元素全为0的矩阵。
下面是一个示例的数组邻接矩阵:
```
A B C D
A 0 1 1 0
B 1 0 0 1
C 1 0 0 1
D 0 1 1 0
```
上述邻接矩阵表示了一个无向图,其中节点A与节点B、C相连,节点B与节点A、D相连,节点C与节点A、D相连,节点D与节点B、C相连。
阅读全文