编写c语言算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信 息建立有向图的邻接表。
时间: 2024-02-25 12:58:55 浏览: 85
以下是一个简单的C语言算法,可以根据输入的顶点数目、弧的数目、顶点信息和弧信息来建立有向图的邻接表:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
typedef struct ArcNode {
int adjvex; // 该弧指向的顶点位置
struct ArcNode *nextarc; // 指向下一条弧的指针
} ArcNode;
typedef struct VNode {
char data; // 顶点信息
ArcNode *firstarc; // 指向第一条依附该顶点的弧的指针
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices; // 邻接表
int vexnum, arcnum; // 顶点数目和弧的数目
} ALGraph;
// 创建有向图的邻接表
void create(ALGraph *G) {
printf("请输入顶点数目和弧的数目:");
scanf("%d %d", &G->vexnum, &G->arcnum);
// 初始化邻接表中的每个顶点
for (int i = 0; i < G->vexnum; i++) {
printf("请输入第%d个顶点的信息:", i + 1);
scanf(" %c", &G->vertices[i].data);
G->vertices[i].firstarc = NULL;
}
// 依次输入每条弧的信息,并在邻接表中添加该弧
for (int i = 0; i < G->arcnum; i++) {
int v1, v2;
printf("请输入第%d条弧的信息(起点 终点):", i + 1);
scanf("%d %d", &v1, &v2);
// 在v1的依附表中添加一条指向v2的弧
ArcNode *p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = v2 - 1;
p->nextarc = G->vertices[v1 - 1].firstarc;
G->vertices[v1 - 1].firstarc = p;
}
}
// 测试函数
int main() {
ALGraph G;
create(&G);
return 0;
}
```
该算法通过一个邻接表来表示有向图,其中邻接表中的每个顶点包含该顶点的信息和一个指向其依附表的指针。依附表中存储了指向该顶点的所有弧的信息,每条弧包含该弧指向的顶点位置和一个指向下一条弧的指针。算法通过依次输入顶点数目、弧的数目、顶点信息和弧信息来创建有向图的邻接表。
阅读全文