圖的算法專題——拓撲排序

拓撲排序算法


 

主要應用:判斷某個圖是否爲有向無環圖,如有環則拓撲排序一定失敗。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

相關文章
相關標籤/搜索