怎么用代码建立邻接矩阵
时间: 2023-10-06 13:13:14 浏览: 110
邻接矩阵是用于表示图的常用数据结构之一,可以用二维数组表示。如果有 $n$ 个节点,那么邻接矩阵就是一个 $n \times n$ 的矩阵,其中第 $i$ 行第 $j$ 列的元素表示节点 $i$ 和节点 $j$ 之间是否存在一条边。
下面是一个简单的代码示例,用于构建无向图的邻接矩阵:
```python
n = 5 # 节点数
edges = [(0, 1), (0, 2), (1, 3), (2, 3), (2, 4)] # 边列表
# 初始化邻接矩阵
adj_matrix = [[0] * n for _ in range(n)]
# 对于每一条边,将邻接矩阵中的相应位置设为 1
for edge in edges:
x, y = edge
adj_matrix[x][y] = 1
adj_matrix[y][x] = 1 # 如果是无向图,需要将两个方向都设置为 1
```
如果是有向图,可以将邻接矩阵中的相应位置设为出度或入度。比如,如果节点 $i$ 有 $p$ 条出边和 $q$ 条入边,那么邻接矩阵中第 $i$ 行第 $j$ 列的元素就设为 $p$,第 $j$ 行第 $i$ 列的元素就设为 $q$。
相关问题
用c语言代码建立邻接矩阵
下面是用 C 语言代码建立邻接矩阵的示例:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 定义邻接矩阵的最大大小
int main() {
int n; // 定义顶点数
int e; // 定义边数
int matrix[MAX_SIZE][MAX_SIZE]; // 定义邻接矩阵
printf("请输入顶点数:");
scanf("%d", &n);
printf("请输入边数:");
scanf("%d", &e);
// 初始化邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = 0;
}
}
// 输入每条边的信息
for (int i = 0; i < e; i++) {
int from, to;
printf("请输入第%d条边的起点和终点:", i + 1);
scanf("%d%d", &from, &to);
matrix[from][to] = 1; // 有向图
// matrix[from][to] = matrix[to][from] = 1; // 无向图
}
// 输出邻接矩阵
printf("邻接矩阵为:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
示例中,我们首先输入顶点数和边数,然后通过一个二重循环来初始化邻接矩阵。接着,我们输入每条边的信息,并将邻接矩阵对应位置置为 1。最后,我们输出邻接矩阵。需要注意的是,如果是无向图,我们需要将邻接矩阵的对称位置也置为 1。
编写用邻接矩阵表示有向带权网时,图的基本操作的实现函数,主要包括: ①初始化邻接矩阵表示的有向带权图 ②建立邻接矩阵表示的有向带权图 (即通过输入图的每条边建立图的邻接矩阵) ③输出邻接矩阵表示的有向带权图(即输出图的每条边)同时建立一个验证操作实现的主函数main()进行测试的实现源代码
下面是实现代码:
```c++
#include <iostream>
using namespace std;
const int MAXV = 100; // 最大顶点数
const int INF = 0x3f3f3f3f; // 表示无穷大
int G[MAXV][MAXV]; // 邻接矩阵表示的有向带权图
int n, m; // n表示顶点数,m表示边数
// 初始化邻接矩阵表示的有向带权图
void init() {
for (int i = 0; i < MAXV; i++) {
for (int j = 0; j < MAXV; j++) {
if (i == j) {
G[i][j] = 0; // 初始化对角线上的元素为0
} else {
G[i][j] = INF; // 其他元素初始化为无穷大
}
}
}
}
// 建立邻接矩阵表示的有向带权图
void create() {
cout << "请输入顶点数和边数:" << endl;
cin >> n >> m;
cout << "请输入每条边的起点、终点和边权值:" << endl;
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
G[u][v] = w;
}
}
// 输出邻接矩阵表示的有向带权图
void print() {
cout << "邻接矩阵如下:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (G[i][j] == INF) {
cout << "INF\t";
} else {
cout << G[i][j] << "\t";
}
}
cout << endl;
}
}
// 主函数main()进行测试
int main() {
init();
create();
print();
return 0;
}
```
使用示例:
```
请输入顶点数和边数:
4 5
请输入每条边的起点、终点和边权值:
0 1 2
0 2 1
1 2 3
1 3 4
2 3 1
邻接矩阵如下:
0 2 1 INF
INF 0 3 4
INF INF 0 1
INF INF INF 0
```
阅读全文