请用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] (如果创建的是无向图弹出以下菜单) 请选择需要完成的操作: 1---DFS 2---BFS 3---Prim 4---Kruskal 5---Dijkstra 6---Floyd 7---D-Search 8---Quit 请输入你的选择: .... (如果创建的是有向图弹出以下菜单) 请选择需要完成的操作: 1---DFS 2---BFS 3---Topological Sorting 4---Critical Path 5---Dijkstra 6---Floyd 7---D-Search 8---Quit 请输入你的选择: …… 说明:D-搜索
时间: 2024-03-09 10:51:41 浏览: 84
编写算法,由依次输入的顶点数目、弧的数目、各顶点信息和各条弧信息建立有向图的邻接表。
4星 · 用户满意度95%
下面是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 图的最大顶点数
// 边表结点
typedef struct ArcNode {
int adjvex; // 该边所指向的顶点的位置
struct ArcNode *next; // 指向下一条边的指针
} ArcNode;
// 顶点表结点
typedef struct VertexNode {
char data; // 顶点信息
ArcNode *firstarc; // 指向第一条依附该顶点的边的指针
} VertexNode;
// 图的邻接表
typedef struct {
VertexNode vertexes[MAX_VERTEX_NUM]; // 顶点表
int vexnum, arcnum; // 图的当前顶点数和边数
int kind; // 图的种类(有向图或无向图)
} ALGraph;
// 创建图的邻接表
void CreateGraph(ALGraph *G) {
int i, j, k;
char ch;
ArcNode *p;
printf("要建立的是有向图(1)还是无向图(0),请选择(输入1或0):");
scanf("%d", &G->kind);
printf("请输入图的顶点数:");
scanf("%d", &G->vexnum);
printf("请输入图的边数:");
scanf("%d", &G->arcnum);
printf("请输入图的各顶点信息:\n");
for (i = 0; i < G->vexnum; i++) {
getchar(); // 吸收上一行的回车符
printf("第%d个顶点信息:", i+1);
scanf("%c", &ch);
G->vertexes[i].data = ch;
G->vertexes[i].firstarc = NULL;
}
printf("请输入边的信息,格式为:序号1,序号2(序号依次为0、1、2……):\n");
for (k = 0; k < G->arcnum; k++) {
printf("请输入第%d条边:", k);
scanf("%d,%d", &i, &j);
// 新建一个边表结点
p = (ArcNode*) malloc(sizeof(ArcNode));
p->adjvex = j;
// 将该边表结点插入到i所在顶点的边表头部
p->next = G->vertexes[i].firstarc;
G->vertexes[i].firstarc = p;
// 如果是无向图,还需要将该边表结点插入到j所在顶点的边表头部
if (G->kind == 0) {
p = (ArcNode*) malloc(sizeof(ArcNode));
p->adjvex = i;
p->next = G->vertexes[j].firstarc;
G->vertexes[j].firstarc = p;
}
}
}
// 输出图的邻接表
void PrintGraph(ALGraph *G) {
int i;
ArcNode *p;
printf("图的邻接表表示如下:\n");
for (i = 0; i < G->vexnum; i++) {
printf("%d\t[%c](", i, G->vertexes[i].data);
p = G->vertexes[i].firstarc;
while (p != NULL) {
printf("%d", p->adjvex);
p = p->next;
if (p != NULL) {
printf(" ");
}
}
printf(")\n");
}
}
int main() {
ALGraph G;
CreateGraph(&G);
PrintGraph(&G);
return 0;
}
```
运行程序后,按照提示输入相应的信息即可创建并输出图的邻接表。
阅读全文