1. 概念及規則
規則:圖中每個頂點只出現一次。
a
在b
前面,則不存在b
在a
前面的路徑。(否則就會形成環)
頂點的順序是
保證所有指向它的下個節點在被指節點前面
2. 演算法及實現
kahn
演算法
#include using namespace std;
csont int maxn = 10005;
struct edgee[maxn];
int n, m, len, head[maxn], rd[maxn], a[maxn];
void insert(int x, int y)
void kahn()
}if(cnt < n)//出棧次數小於n,有環
for(int i=1; i<=cnt; i++) printf("%d ", a[i]);
}int main()
kahn();
return 0;
}
拓撲排序 Kahn演算法
該演算法的關鍵在於需要維護乙個入度為0的頂點的集合 每次從該集合中取出 如果要求輸出時編號小的在前,可以用優先佇列儲存集合 乙個頂點,將該頂點放入儲存結果的 list中。緊接著迴圈遍歷由該頂點引出的所有邊,從圖中移除這條邊,同時獲取該邊的另外乙個頂點,如果該頂點的入度在減去本條邊之後為0,那麼也將這...
拓撲排序 kahn演算法及dfs的拓撲排序
有個人的家族很大,輩分關係很混亂,請你幫整理一下這種關係。給出每個人的孩子的資訊。輸出乙個序列,使得每個人的後輩都比那個人後列出 sample input 5 0 4 5 1 0 1 0 5 3 0 3 0樣例輸出 sample output 2 4 5 3 1 因為需輸出字典序最小的因而要使用優先...
HDU 1258 拓撲排序Kahn演算法
問題概述 有n個比賽隊,編號為從1到n,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在 裁 判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2 用p1 p2表示 這種,排名時p1在 必 須在p2之前,現在請你程式設計序確定排名 答案不止一種,按照隊伍從小到大排列...