用c语言针对以下问题(1) 键盘输入数据,建立一个有向图的邻接表。 (2) 输出该邻接表。 (3) 在有向图的邻接表的基础上计算各顶点的度,并输出。写出完整代码
时间: 2024-03-07 16:47:57 浏览: 163
C语言 输入无向图连通图的顶点数、顶点信息、边数、顶点对序列及遍历的起始点序号,输出深度优先遍历序列
5星 · 资源好评率100%
好的,以下是用C语言实现的针对以上问题的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100 // 最大顶点数
typedef struct edge { // 边结构体
int dest; // 目标顶点
struct edge* next; // 下一条边的指针
} Edge;
typedef struct vertex { // 顶点结构体
Edge* head; // 第一条边的指针
int inDegree; // 顶点的入度
} Vertex;
Vertex vertices[MAX_VERTICES]; // 顶点数组
int numVertices = 0; // 顶点数
void addEdge(int src, int dest) { // 添加一条边
Edge* newEdge = (Edge*)malloc(sizeof(Edge));
newEdge->dest = dest;
newEdge->next = vertices[src].head;
vertices[src].head = newEdge;
vertices[dest].inDegree++; // 目标顶点的入度加1
}
void printGraph() { // 输出邻接表
printf("邻接表如下:\n");
for (int i = 0; i < numVertices; i++) {
printf("%d -> ", i);
Edge* curr = vertices[i].head;
while (curr) {
printf("%d ", curr->dest);
curr = curr->next;
}
printf("\n");
}
}
void printDegrees() { // 输出各顶点的度
printf("各顶点的度如下:\n");
for (int i = 0; i < numVertices; i++) {
printf("顶点 %d 的度为:%d\n", i, vertices[i].inDegree);
}
}
int main() {
printf("请输入有向图的顶点数和边数:\n");
int numEdges;
scanf("%d %d", &numVertices, &numEdges);
printf("请依次输入每条边的起点和终点(顶点编号从0开始):\n");
for (int i = 0; i < numEdges; i++) {
int src, dest;
scanf("%d %d", &src, &dest);
addEdge(src, dest);
}
printGraph();
printDegrees();
return 0;
}
```
代码实现了以下功能:
1. 通过键盘输入数据,建立一个有向图的邻接表。
2. 输出该邻接表。
3. 在有向图的邻接表的基础上计算各顶点的度,并输出。
注意:为了方便起见,本代码中的顶点编号从0开始。如果需要从1开始,只需在输入时将所有输入的编号减1即可。
阅读全文