在头文件ljb.h中,更改头结点类型VertexNode(原头结点类型定义如下示),增加一个id数据域,用于标记结点的入度;编写一个函数void inDegree(LinkedGraph *g),用于计算有向图中每个结点的入度。编写主函数验证该函数的正确性。文件名称:computerInDegree.c void inDegree(LinkedGraph *g){ }//将此函数写完整 int main() { int k=0; LinkedGraph g; creat(&g,"G11.txt",1); /*建立文件G11.txt对应的有向图*/ printf("\n输出该有向图:\n"); print(g); inDegree(g); return 0; }
时间: 2024-03-23 21:36:08 浏览: 74
好的,我已经了解了你的要求。针对你的问题,我可以给出以下代码实现:
```
#include "ljb.h"
void inDegree(LinkedGraph *g) {
int id[g->n]; // 定义一个数组用于存储每个结点的入度
for (int i = 0; i < g->n; i++) {
id[i] = 0; // 初始化每个结点的入度为0
}
for (int i = 0; i < g->n; i++) {
// 遍历每一个结点的邻接表
EdgeNode *p = g->adjlist[i].firstedge;
while (p != NULL) {
int j = p->adjvex; // j为当前邻接点的编号
id[j]++; // 将邻接点的入度加1
p = p->next;
}
}
// 输出每个结点的入度
printf("\n每个结点的入度为:\n");
for (int i = 0; i < g->n; i++) {
printf("结点%d的入度为%d\n", i, id[i]);
}
}
int main() {
int k = 0;
LinkedGraph g;
creat(&g, "G11.txt", 1);
printf("\n输出该有向图:\n");
print(g);
inDegree(&g);
return 0;
}
```
在这段代码中,我们首先定义了一个数组 `id` 用于存储每个结点的入度。然后遍历每个结点的邻接表,将每个邻接点的入度加1。最后输出每个结点的入度。
在主函数中,我们首先读取文件 "G11.txt" 中的有向图,并输出该有向图。然后调用函数 `inDegree` 计算每个结点的入度,并输出结果。
请注意,这段代码中的头文件 `ljb.h` 和结构体 `LinkedGraph` 可能与你的实际情况不同,需要根据你的代码进行相应修改。
阅读全文