C语言编写:图的邻接表创建和输出 实验要求: 要建立的是有向图(1)还是无向图(0),请选择(输入1或0):1 =======将建立一个无向图======= 请输入图的顶点数:8 请输入图的边数:9 请输入图的各顶点信息: 第1个顶点信息:A 第2个顶点信息:B 第3个顶点信息:C 第4个顶点信息:D 第5个顶点信息:E 第6个顶点信息:F 第7个顶点信息:G 第8个顶点信息:H 请输入边的信息,格式为:序号1,序号2(序号依次为0、1、2……): 请输入第0条边:0,1 请输入第2条边:0,2 请输入第3条边:1,3 请输入第4条边:1,4 请输入第5条边:2,5 请输入第6条边:2,6 请输入第7条边:3,7 请输入第8条边:4,7 请输入第9条边:5,6 图的邻接表表示如下: 0 [A][2] [1] 1 [B][4] [3] [0] 2 [C][6] [5] [0] 3 [D][7] [1] 4 [E][7] [1] 5 [F][6] [2] 6 [G][5] [2] 7 [H][4] [3]
时间: 2023-12-07 09:02:55 浏览: 71
有向图的邻接表(C语言)
以下是邻接表创建和输出的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 100
struct Edge {
int to; // 边的终点
int next; // 下一条边的编号
};
int head[MAXN]; // 邻接表头
Edge edges[MAXN * 2]; // 边列表
int edgeCount = 0; // 边的数量
void addEdge(int from, int to) {
edges[edgeCount].to = to;
edges[edgeCount].next = head[from];
head[from] = edgeCount++;
}
void printGraph(int n) {
int i, p;
for (i = 0; i < n; i++) {
printf("%d\t[", i);
p = head[i];
while (p != -1) {
printf("%c] -> [", 'A' + edges[p].to);
p = edges[p].next;
}
printf("NULL]\n");
}
}
int main() {
memset(head, -1, sizeof(head)); // 初始化邻接表头为-1
int n, m, u, v;
printf("要建立的是有向图(1)还是无向图(0),请选择(输入1或0):");
scanf("%d", &m);
printf("请输入图的顶点数:");
scanf("%d", &n);
printf("请输入图的边数:");
scanf("%d", &m);
printf("请输入图的各顶点信息:\n");
int i;
char ch;
for (i = 0; i < n; i++) {
printf("第%d个顶点信息:", i + 1);
scanf(" %c", &ch);
}
printf("请输入边的信息,格式为:序号1,序号2(序号依次为0、1、2……):\n");
for (i = 0; i < m; i++) {
printf("请输入第%d条边:", i);
scanf("%d%d", &u, &v);
addEdge(u, v);
if (m == 0) {
addEdge(v, u);
}
}
printf("图的邻接表表示如下:\n");
printGraph(n);
return 0;
}
```
代码中使用邻接表来存储图,addEdge函数用于向邻接表中添加一条边,printGraph函数用于输出邻接表。在主函数中,先依次输入图的顶点数、边数和各个顶点的信息,再输入边的信息,最后输出邻接表。
阅读全文