拓撲排序算法
主要應用:判斷某個圖是否爲有向無環圖,如有環則拓撲排序一定失敗。spa
算法流程:code
(1) 遍歷全部頂點,將入度爲0的頂點入隊blog
(2) 按入隊順序依次輸出頂點,並每次將該頂點所連的頂點入度減1,若減完後入度變爲0就入隊,加入拓撲序列頂點數num加一。排序
(3) 若num==n 說明拓撲排序成功。it
1 const int MAXV=1010; 2 vector<int> G[MAXV]; 3 int n,m,inDegree[MAXV]; 4 bool topologicalsort(){ 5 int num=0; 6 queue<int> q; 7 for(int i=0;i<n;i++){ 8 if(inDegree[i]==0){ 9 q.push(i); 10 } 11 } 12 while(!q.empty()){ 13 int top=q.front(); 14 //printf("%d",u); 15 q.pop(); 16 for(int i=0;i<G[u].size();i++){ 17 int v=G[u][i]; 18 inDegree[v]--; 19 if(inDegree[v]==0){ 20 q.push(v); 21 } 22 } 23 num++; 24 } 25 if(num==n) return true; 26 else return false; 27 }
如有多個入度爲零的頂點時,題目要求選擇最小編號頂點,能夠將queue改成priority_queue。io