用c语言实现在一个无向图中根据定点和边建立一个邻接矩阵,且输入输出的数据都在屏幕显示,顶点使用字符型
时间: 2024-03-16 20:41:28 浏览: 56
无向图的建立和邻接矩阵的输出
5星 · 资源好评率100%
好的,下面是用C语言实现建立邻接矩阵的代码:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
typedef char VertexType; // 顶点类型
// 邻接矩阵存储结构
typedef struct {
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数
} AdjMatrix;
// 初始化邻接矩阵
void InitAdjMatrix(AdjMatrix *g) {
int i, j;
g->vertex_num = 0;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
for (j = 0; j < MAX_VERTEX_NUM; j++) {
g->edge[i][j] = 0;
}
}
}
// 添加顶点
int AddVertex(AdjMatrix *g, VertexType v) {
if (g->vertex_num >= MAX_VERTEX_NUM) {
return 0;
}
g->vertex_num++;
g->edge[g->vertex_num - 1][g->vertex_num - 1] = v;
return 1;
}
// 添加边
int AddEdge(AdjMatrix *g, VertexType v1, VertexType v2) {
int i, j;
int v1_index = -1, v2_index = -1;
for (i = 0; i < g->vertex_num; i++) {
if (g->edge[i][i] == v1) {
v1_index = i;
}
if (g->edge[i][i] == v2) {
v2_index = i;
}
}
if (v1_index == -1 || v2_index == -1) {
return 0;
}
g->edge[v1_index][v2_index] = 1;
g->edge[v2_index][v1_index] = 1;
return 1;
}
// 输出邻接矩阵
void PrintAdjMatrix(AdjMatrix g) {
int i, j;
for (i = 0; i < g.vertex_num; i++) {
for (j = 0; j < g.vertex_num; j++) {
printf("%d ", g.edge[i][j]);
}
printf("\n");
}
}
int main() {
AdjMatrix g;
InitAdjMatrix(&g);
// 添加顶点
AddVertex(&g, 'A');
AddVertex(&g, 'B');
AddVertex(&g, 'C');
AddVertex(&g, 'D');
// 添加边
AddEdge(&g, 'A', 'B');
AddEdge(&g, 'B', 'C');
AddEdge(&g, 'C', 'D');
AddEdge(&g, 'D', 'A');
AddEdge(&g, 'A', 'C');
// 输出邻接矩阵
PrintAdjMatrix(g);
return 0;
}
```
这段代码实现了一个无向图的邻接矩阵存储结构,并提供了添加顶点和添加边的接口,可以根据需要来添加顶点和边。在程序中,我们使用字符型来表示顶点,可以根据需要改成其他类型。另外,这里只是简单地将邻接矩阵输出到屏幕上,实际应用中可以根据需要进行调整。
阅读全文