邻接矩阵如何定义有个n*n的二维数组
时间: 2024-05-10 18:17:12 浏览: 153
邻接矩阵通常用来表示无向图和有向图中各个节点之间的连通性,其定义为一个n*n的二维数组。对于无向图,邻接矩阵中的元素a[i][j]表示节点i和节点j之间是否有边,如果有,则为1,无则为0。由于无向图的邻接矩阵是对称的,即a[i][j]=a[j][i],因此只需要填写矩阵的上三角或下三角即可。
对于有向图,邻接矩阵中的元素a[i][j]表示节点i到节点j之间是否有边,如果有,则为1,无则为0。因为有向图的邻接矩阵不一定对称,所以需要填写整个矩阵。
邻接矩阵可以使用二维数组来实现,数组的下标表示节点的编号,数组元素表示节点之间的连通情况。例如,以下是一个无向图的邻接矩阵:
```
1 2 3 4 5
1 0 1 0 1 0
2 1 0 1 0 0
3 0 1 0 1 1
4 1 0 1 0 1
5 0 0 1 1 0
```
其中,a[1][2]=1表示节点1和节点2之间有边,a[3][5]=1表示节点3和节点5之间有边,a[1][5]=0表示节点1和节点5之间没有边。
相关问题
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。最后输出整个邻接矩阵。
两个一维数组求邻接矩阵
邻接矩阵是一种常见的图的表示方法,可以使用两个一维数组来求得邻接矩阵。
首先,需要知道图的顶点个数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]]
```
这样就得到了邻接矩阵的表示。
阅读全文