2-2设具有n个顶点的有向图用邻接表存储(不存在逆邻接表)。试写出计算所有顶点入度的算法,将每个顶点的入度值分别存入一维数组 int Indegree[n]中。生成C语言代码
时间: 2023-06-25 12:04:45 浏览: 99
以下是生成计算所有顶点入度的算法的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 定义图的最大顶点数
typedef struct ArcNode{
int adjvex; // 该弧所指向的顶点的位置
struct ArcNode *nextarc; // 指向下一条弧的指针
}ArcNode;
typedef struct VNode{
int data; // 顶点信息
ArcNode *firstarc; // 指向第一条依附该顶点的弧的指针
}VNode, AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices; // 邻接表
int vexnum, arcnum; // 图的当前顶点数和弧数
}ALGraph;
void ComputeIndegree(ALGraph G, int *Indegree){
int i;
ArcNode *p;
// 初始化入度数组
for(i = 0; i < G.vexnum; i++)
Indegree[i] = 0;
// 遍历邻接表,计算所有顶点的入度
for(i = 0; i < G.vexnum; i++){
p = G.vertices[i].firstarc;
while(p){
Indegree[p->adjvex]++;
p = p->nextarc;
}
}
}
int main(){
int i, j;
int Indegree[MAX_VERTEX_NUM];
ALGraph G;
// 读入图的顶点数和弧数
scanf("%d%d", &G.vexnum, &G.arcnum);
// 读入每个顶点的信息,建立邻接表
for(i = 0; i < G.vexnum; i++){
scanf("%d", &G.vertices[i].data);
G.vertices[i].firstarc = NULL;
}
// 读入每条弧的信息,建立邻接表
for(j = 0; j < G.arcnum; j++){
int v1, v2;
scanf("%d%d", &v1, &v2);
// 添加一条从v1指向v2的弧
ArcNode *p = (ArcNode *)malloc(sizeof(ArcNode));
p->adjvex = v2;
p->nextarc = G.vertices[v1].firstarc;
G.vertices[v1].firstarc = p;
}
// 计算所有顶点的入度
ComputeIndegree(G, Indegree);
// 输出每个顶点的入度
for(i = 0; i < G.vexnum; i++)
printf("Indegree[%d] = %d\n", i, Indegree[i]);
return 0;
}
```
阅读全文