當前位置:
首頁 >
DAG图之拓扑排序
發布時間:2025/3/20
15
豆豆
DAG圖也成為有向無環圖,拓撲排序的時間復雜度為O(V+E),其中V、E分別為頂點和邊的個數。
#include <iostream> using namespace std; #define Maxsize 100 typedef char VertexType; typedef int EdgeType;typedef struct ArcNode{ //存儲邊 int adjvex; //該弧所指向的頂點 struct ArcNode *nextarc; //指向下一條弧//InfoType info; //網的邊權值 }ArcNode; typedef struct VNode{VertexType data; //頂點信息int count; //新增部分,統計當前入度 ArcNode *firstarc; //指向第一條邊的指針 }VNode; typedef struct{VNode adjlist[Maxsize];int vexnum,arcnum; }AGraph; bool TopSort(AGraph *G){int i,j,n=0;Stack S;InitStack(S); //初始化棧ArcNode *p;for(i=0;i<G->vexnum;i++)if(G->adjlist[i].count==0)Push(&S,i); //入度為0的頂點進棧 while(!IsEmpty(S)){Pop(&S,i);cout<<i<<endl; //輸出頂點i n++; //統計已輸出頂點個數p=G->adjlist[i].firstarc;while(p!=NULL){j=p->adjvex;G->adjlist[j].count--; //i頂點引出的邊所指向的頂點入度減1if(G->adjlist[j].count==0)Push(&S,j); //入度為0的頂點入棧p=p->nextarc; } }if(n==G->vexnum)return true; //拓撲排序成功elsereturn false; //圖有環路(n<G->vexnum),拓撲排序失敗 }?
總結
- 上一篇: 最短路径-Floyd(佛洛伊德算法)
- 下一篇: 让你秒懂的折半查找(二分查找)