有向無環圖的拓撲排序(DFS實現)
阿新 • • 發佈:2019-02-04
1.有向無環圖的拓撲排序
// enDegree表示每個頂點的入度,這個資料結構可以從圖的結構求出來
// graph是一個二維陣列,但是這個陣列不是圖的鄰接矩陣,graph[i][j]表示依賴於i的第j個元素的編號
// 在本文中,i依賴於j表達的意思是,拓撲排序中必須先輸出j,然後才能輸出i
int topSort(vector<vector<int>>& relayVec, vector<int>& enDegree) {
queue<int> myQueue;
for (int i = 0; i < enDegree.size (); ++i) {
if (enDegree[i] == 0){
myQueue.push(i);
}
}
while(!myQueue.empty()){
int top = myQueue.front();
for(int i = 0;i<relayVec[top].size();++i){ // 所有依賴於編號為top的元素的入度減小1,如果減小後剛好為0,入隊
if(--enDegree(relayVec[top][i])==0)
myQueue.push(relayVec[top][i]);
}
}