打印可以实现有向图和无向图的邻接矩阵,首先提问是有向图还是无向图,然后是输入节点数和边数,规定用c语言。
时间: 2024-06-10 16:04:46 浏览: 56
您好,非常高兴能够为您解答问题!针对您的问题,以下是有向图和无向图邻接矩阵的实现方法:
1. 有向图的邻接矩阵实现方法:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 100
int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵,MAX_VERTEX_NUM为最大的节点数
int main() {
int nodeNum, edgeNum, i, from, to, weight;
printf("请输入节点数和边数:");
scanf("%d %d", &nodeNum, &edgeNum);
// 初始化, 将邻接矩阵中的元素全部赋值为0
for(i=0; i<nodeNum; i++) {
for(int j=0; j<nodeNum; j++) {
matrix[i][j] = 0;
}
}
// 读入节点之间的连边关系,并将权值存储在邻接矩阵中
for(i=0; i<edgeNum; i++) {
printf("请输入连接关系和权值(起点、终点和权值):");
scanf("%d %d %d", &from, &to, &weight);
matrix[from][to] = weight; // 填写邻接矩阵
}
// 输出邻接矩阵
printf("有向图的邻接矩阵为:\n");
for(i=0; i<nodeNum; i++) {
for(int j=0; j<nodeNum; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
2. 无向图的邻接矩阵实现方法:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 100
int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵,MAX_VERTEX_NUM为最大的节点数
int main() {
int nodeNum, edgeNum, i, from, to, weight;
printf("请输入节点数和边数:");
scanf("%d %d", &nodeNum, &edgeNum);
// 初始化, 将邻接矩阵中的元素全部赋值为0
for(i=0; i<nodeNum; i++) {
for(int j=0; j<nodeNum; j++) {
matrix[i][j] = 0;
}
}
// 读入节点之间的连边关系,并将权值存储在邻接矩阵中
for(i=0; i<edgeNum; i++) {
printf("请输入连接关系和权值(起点、终点和权值):");
scanf("%d %d %d", &from, &to, &weight);
matrix[from][to] = matrix[to][from] = weight; // 填写邻接矩阵
}
// 输出邻接矩阵
printf("无向图的邻接矩阵为:\n");
for(i=0; i<nodeNum; i++) {
for(int j=0; j<nodeNum; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
注意:上述代码仅实现了有向图和无向图的邻接矩阵的构建,无法保证其正确性。例如,在构建有向图时,输入的边数应该小于等于节点数的平方,否则会出现越界情况。建议您根据实际情况进行修改和补充,以保证程序的正确性。
阅读全文