經典拓撲排序模板

2021-10-22 22:03:15 字數 1416 閱讀 1160

拓撲排序是圖論中一種典型的演算法。通過拓撲排序可以梳理圖的層次結構。像什麼工期完成類的圖論任務,就是典型的應用。第二個應用就是判斷圖中是否存在環路的問題。

程式中建圖的方式是鄰接表形式,**如下:

vector

>

graph

(n, vector

);

下面是拓撲排序的模板:

vector

>

graph

(n, vector);

根據所給有向圖的指向關係,完成graph圖的建立

// 統計初始入度為0的

vector

indegree

(n,0);

for(int i=

0; iqueue que;

// 佇列儲存,其實如果對於順序沒有要求棧也行

for(int i=

0; i)while

(!que.

empty()

)}/* 如果要判斷是否存在環路,可以在最後判斷一下indegree陣列,如果全為0說明無環,否則說明有環。

*/

來兩道題練習一下吧!(題目是他人部落格找的,不是**來的。沒有去oj驗證ac,只是通過了樣例測試。輸出格式也沒調,勉強過關吧!)

題目一:確定比賽名次

**如下:

#include.h>

using namespace std;

int main

(void))

;for

(int i=

0; i) vector

indegree

(n,0);

for(int i=

0; isize()

; i++)}

priority_queue que;

// 題目對順序有要求,這裡用了優先佇列

for(int i=

0; i)while

(!que.

empty()

)}return0;

}

題目二:poj 2367:genealogical tree

#include.h>

using namespace std;

int main

(void))

; int i;

for(int j=

0; jvector

indegree

(n,0);

for(int i=

0; iqueue que;

for(int i=

0; i)while

(!que.

empty()

)}return0;

}

參考資料:

拓撲排序模板

include include include include include using namespace std const int maxn 30 int head maxn ip,indegree maxn int n,m,seq maxn struct note edge maxn ma...

模板 拓撲排序

拓撲排序 將 小於 關係看做有向圖,形成一條排好序的關係,可能不唯一。queue實現,vector儲存 const int maxn 10005 int in maxn sum,n,m,fa maxn vectorg maxn void init void toposort 按字典序輸出 改為pri...

拓撲排序模板

演算法步驟 1.從aov網中選擇乙個沒有前驅的頂點 該定點的入度為0 並且輸出它 2.從aov網中選刪除該頂點,並且刪除以該頂點為尾的全部有向邊。3.重複上述兩步,知道剩餘的網中不再存在沒有直接前驅的頂點為止。hdu1285 include include include include inclu...