用C语言先依次输入无向图的顶点信息,再依次输入无向图的边信息,建立图的邻接矩阵存储结构并将其顶点向量和邻接矩阵打印输出:
时间: 2024-02-06 12:09:58 浏览: 65
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
typedef struct {
char vertex[MAX_VERTEX_NUM]; // 顶点向量
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数
int edge_num; // 边数
} Graph;
// 初始化图
void init_graph(Graph *G) {
int i, j;
G->vertex_num = 0;
G->edge_num = 0;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
for (j = 0; j < MAX_VERTEX_NUM; j++) {
G->edge[i][j] = 0;
}
}
}
// 添加顶点
void add_vertex(Graph *G, char vertex) {
G->vertex[G->vertex_num++] = vertex;
}
// 添加边
void add_edge(Graph *G, int v1, int v2) {
G->edge[v1][v2] = 1;
G->edge[v2][v1] = 1;
G->edge_num++;
}
// 打印图的顶点向量和邻接矩阵
void print_graph(Graph G) {
int i, j;
printf("顶点向量:");
for (i = 0; i < G.vertex_num; i++) {
printf("%c ", G.vertex[i]);
}
printf("\n邻接矩阵:\n");
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() {
Graph G;
int i, v1, v2;
char vertex;
init_graph(&G);
printf("请输入顶点信息(以#结束):\n");
while (1) {
scanf("%c", &vertex);
if (vertex == '#') {
break;
}
add_vertex(&G, vertex);
}
printf("请输入边信息(以-1 -1结束):\n");
while (1) {
scanf("%d %d", &v1, &v2);
if (v1 == -1 && v2 == -1) {
break;
}
add_edge(&G, v1, v2);
}
print_graph(G);
return 0;
}
```
以上代码实现了输入顶点信息和边信息,并利用邻接矩阵存储结构建立图,并输出顶点向量和邻接矩阵。
阅读全文