無後繼的頂點優先拓撲排序方法
該方法的每一步均是輸出當前無後繼(即出度為
棧(或向量)T來保存輸出的頂點序列
次出棧即可得拓撲序列
算法的抽象描述為
NonSuccFirstTopSort(G){//優先輸出無後繼的頂點
while(G中有出度為
從G中選一出度為
從G中刪去v及v的所有人邊
}
if(輸出的頂點數目<|V(G)|)
Error(
}
在對該算法求精時
度域來保存各頂點當前的出度;設置一個棧或隊列來暫存所有出度為零的頂點
該算法完全類似於NonPreFirstTopSort
利用深度優先遍歷對DAG拓撲排序
當從某頂點v出發的DFS搜索完成時
此在DFS算法返回之前輸出頂點v即可得到 DAG的逆拓撲序列
其中第一個輸出的頂點必是無後繼(出度為
加T來保存輸出的頂點
利用DFS求拓撲序列的抽象算法可描述為
void DFSTopSort(G
//在DisTraverse中調用此算法
int j;
visited[i]=TRUE; //訪問i
for(所有i的鄰接點j)//即∈E(G)
if(!visited[j])
DFSTopSort(G
//以上語句完全類似於DFS算法
Push(&T
}
只要將深度優先遍歷算法DFSTraverse中對DFS的調用改為對DFSTopSort的調用
象算法求精後得到
若G是一個DAG
From:http://tw.wingwit.com/Article/program/sjjg/201311/23812.html