拓扑排序-用栈实现(附带邻接表图的存储结构定义)

tech2023-12-27  73

#define MaxVertexNum 100//最大顶点数目 typedef struct ArcNode{//边表结点 int adjvex; struct ArcNode *next; InfoType info;//权值 }ArcNode; typedef struct VNode{//顶点表结点 VertexType data; ArcNode *first;//指向第一条依附该顶点的弧 }VNode,AdjList[MaxVertexNum]; typedef struct{ AdjList vertices;//邻接表 int vexnum,arcnum; }Graph; bool ToplogicalSort(Graph G) {//拓扑排序 InitStack(S);//初始化栈 for(int i=0;i<G.vexnum;i++) if(indegree[i]==0) Push(S,i);//入度为0的结点进栈 int count=0; while(!IsEmpty(S)) {//栈顶元素出栈 Pop(S,i); print[count++]=i; for(p=G.vertices[i].firstarc;p;p=p->nextarc) {//将所有i指向的结点入度减1,将入度为0的结点入栈 v=p->adjvex; if(!(--indegree[v])) Push(S,v); } if(count<G.vexnum) return false; else return true; }

 

最新回复(0)