#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 50
typedef struct ArcNode{
int adjvex;
ArcNode *next;
};
struct VNode{
char value;
ArcNode *first;
};
struct AdGraph{
VNode vertices[MaxSize];
int vexnum,arcnum;
};
//求图中每个顶点的入度
void getAllNodeDegree(AdGraph G,int *indegree){
for(int i = 0;i < G.vexnum;i++){
ArcNode *p = G.vexnum[i].first;
while(p){
indegree[p->adjvex]++;
p = p->next;
}
}
}
//算法思想:
/**
首先,先用一个indegree数组把所有顶点的入度都初始化为0,再用一个函数(getAllNodeDegree())来得到整个图中所有顶点的入度。
遍历整个数组,将入度为0的元素序列保存到栈中(stack[MaxSize]),当栈不为空的时候(top != -1),
将最后一个元素出栈,然后将其发到其他顶点的边也删除(这里的删除是逻辑删除,更改的是indegree[]),直到p走到空,(当p走到空的过程中,可能会有p->adjvex的顶点的入度被删完了,所以如果每一轮while(p){}循环里面都要设置if(indegree[p->adjvex] == 0;),来检测这一轮while循环删除里是否有元素的入度被删为
【数据结构—图】拓扑Topo排序
于 2022-11-18 20:03:02 首次发布
本文深入探讨了图论中的拓扑排序概念,详细解释了如何对有向无环图(DAG)进行拓扑排序,并提供了相关算法实现的步骤和示例,帮助读者理解这一重要的数据结构操作。
摘要由CSDN通过智能技术生成