用c语言写 /*TODO: 创建邻接矩阵 功能描述:调用方法setVInfo(MGraph *MG)设置顶点信息,循环处理,提示输入边的顶点信息,建立邻接矩阵。 for (循环条件) { printf("请输入边的两个顶点以及权值:\n"); scanf("%c %c %d", 边的顶点, 边的顶点,边的权值); } 参数说明:MG-MGraph型指针参数 返回值说明:无
时间: 2024-03-14 19:47:03 浏览: 89
以下是用C语言实现创建邻接矩阵的代码,包括调用setVInfo()方法设置顶点信息和循环处理输入边的顶点信息,建立邻接矩阵:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
// 顶点类型
typedef char VertexType;
// 边的权值类型
typedef int EdgeType;
// 图的邻接矩阵类型
typedef struct {
VertexType vexs[MAX_VERTEX_NUM]; // 存储顶点信息
EdgeType edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边的权值信息
int vexnum, edgenum; // 存储图的顶点数和边数
} MGraph;
// 设置顶点信息
void setVInfo(MGraph *MG) {
printf("请输入顶点数:\n");
scanf("%d", &(MG->vexnum));
printf("请输入顶点信息:\n");
for (int i = 0; i < MG->vexnum; i++) {
scanf(" %c", &(MG->vexs[i]));
}
}
// 创建邻接矩阵
void createMGraph(MGraph *MG) {
setVInfo(MG); // 设置顶点信息
printf("请输入边数:\n");
scanf("%d", &(MG->edgenum));
for (int i = 0; i < MG->vexnum; i++) {
for (int j = 0; j < MG->vexnum; j++) {
MG->edges[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请输入边的两个顶点以及权值:\n");
for (int i = 0; i < MG->edgenum; i++) {
VertexType v1, v2;
EdgeType weight;
scanf(" %c %c %d", &v1, &v2, &weight);
int index1 = -1, index2 = -1;
// 查找边的顶点在顶点数组中的下标
for (int j = 0; j < MG->vexnum; j++) {
if (MG->vexs[j] == v1) {
index1 = j;
}
if (MG->vexs[j] == v2) {
index2 = j;
}
}
if (index1 != -1 && index2 != -1) {
// 更新邻接矩阵
MG->edges[index1][index2] = weight;
MG->edges[index2][index1] = weight;
}
}
}
int main() {
MGraph MG;
createMGraph(&MG);
return 0;
}
```
注意事项:
- 代码中使用了scanf()函数读取输入,为了避免读取上一次输入时残留的回车符,需要在%c前加一个空格,即scanf(" %c %c %d", &v1, &v2, &weight);
- 在输入边的顶点信息时,顶点信息的顺序可以任意,但是要注意更新邻接矩阵时需要同时更新两个方向的权值;
- 在输入边的顶点信息时,如果输入的顶点不在顶点数组中,则忽略该输入,不更新邻接矩阵。
阅读全文