C语言实现代码 设一有向图(如下所示),图用邻接表进行存储,输出存储后的邻接表。 image.png 【输入形式】 输入顶点信息,以#结束; 输入弧的信息,以-1,-1结束。 【输出形式】 输出邻接表形式。 【样例输入1】 ABCDEF# 0,1 1,2 2,3 4,1 4,5 -1,-1 【样例输出1】 A:->B B:->C C:->D D: E:->F->B F: 【样例输入2】 ABCDEF# 1,0 1,3 2,1 2,5 3,2 3,4 3,5 4,0 5,0 5,1 5,4 -1,-1 【样例输出2】 A: B:->D->A C:->F->B D:->F->E->C E:->A F:->E->B->A
时间: 2023-06-17 16:02:47 浏览: 69
```
#include <stdio.h>
#include <stdlib.h>
typedef struct ArcNode {
int adjvex; // 邻接点在数组中的位置
struct ArcNode* next; // 指向下一个邻接点的指针
}ArcNode;
typedef struct VNode {
char data; // 顶点信息
ArcNode* first; // 指向第一个邻接点的指针
}VNode, AdjList[100];
typedef struct {
AdjList vertices; // 邻接表
int vexnum; // 顶点数
}ALGraph;
void CreateALGraph(ALGraph* G) {
scanf("%c", &G->vertices[0].data);
G->vexnum = 1; // 初始化顶点数
while (G->vertices[G->vexnum - 1].data != '#') { // 输入顶点信息
scanf("%c", &G->vertices[G->vexnum].data);
G->vertices[G->vexnum].first = NULL;
G->vexnum++;
}
G->vexnum--; // 减去'#'号顶点
int i, j;
char c;
scanf("%d,%d", &i, &j);
while (i != -1 && j != -1) { // 输入弧的信息
ArcNode* p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = j;
p->next = G->vertices[i].first;
G->vertices[i].first = p;
scanf("%d,%d", &i, &j);
}
}
void PrintALGraph(ALGraph G) {
int i;
for (i = 0; i < G.vexnum; i++) {
printf("%c:", G.vertices[i].data);
ArcNode* p = G.vertices[i].first;
while (p) {
printf("->%c", G.vertices[p->adjvex].data);
p = p->next;
}
printf("\n");
}
}
int main() {
ALGraph G;
CreateALGraph(&G);
PrintALGraph(G);
return 0;
}
```