C语言编写程序:假设不带权有向图采用邻接表 G 存储,设计实现以下功能的算法: (1)求出图中每个顶点的入度。 (2)求出图中每个顶点的出度。 (3)求出图中出度为0的顶点数
时间: 2025-01-01 09:41:46 浏览: 22
在C语言中,为了实现对无权有向图的邻接表表示,我们可以创建两个数组,一个用于存储顶点的邻接节点列表,另一个用于存储每个顶点的入度或出度。以下是针对所给功能的简单算法:
(1) 求出图中每个顶点的入度:
```c
int* in_degrees; // 初始化为图中所有顶点的大小
void compute_in_degrees(graph* G, int num_vertices) {
for (int i = 0; i < num_vertices; i++) {
in_degrees[i] = 0;
for (int j = 0; j < G[i].size(); j++) { // 遍历邻接节点列表
in_degrees[G[i][j]]++; // 对每个相邻顶点的入度加一
}
}
}
```
(2) 求出图中每个顶点的出度:
```c
int* out_degrees; // 初始化为图中所有顶点的大小
void compute_out_degrees(graph* G, int num_vertices) {
out_degrees = malloc(sizeof(int) * num_vertices); // 动态分配内存
for (int i = 0; i < num_vertices; i++) {
out_degrees[i] = 0;
for (int adj_vertex : G[i]) { // 遍历当前顶点的所有邻居
out_degrees[adj_vertex]++;
}
}
free(out_degrees); // 释放内存
}
```
(3) 求出图中出度为0的顶点数:
```c
int count_vertices_with_zero_out_degree(graph* G, int num_vertices) {
int zero_out_vertices = 0;
for (int i = 0; i < num_vertices; i++) {
if (out_degrees[i] == 0)
zero_out_vertices++;
}
return zero_out_vertices;
}
```
阅读全文
相关推荐

















