拓撲排序 鏈式前項星 (教材版本實現)

2021-10-11 03:07:25 字數 1084 閱讀 5252

#include

#include

#include

#include

#include

#include

#include

#include

#define fast ios::sync_with_stdio(false)

#define ll long long

using

namespace std;

const

int n =

1e5+10;

int head[n]

,tot,st[n]

,n,m,indegree[n]

;stack<

int> s;

// 用來存當前入度為0的頂點的序號

struct eedge[n]

;void

add(

int a,

int b)

// 讀入邊的操作

intfind_du

(void

)// 遍歷確定圖中每乙個點的入度 }}

vector<

int>

topsort()

}// 先存入初始的時候度就為 0 的點

int count =0;

// 用來記錄當前確定了拓撲序列的點的數目

vector<

int> ans;

while

(!s.

empty()

)// 每次取出乙個入度為0的點,同時刪去與這個點有關的所有邊,創造新的入度為0的邊 }if

(count == n)

// 這個圖中的所有的頂點都可以確定其的拓撲序列位置

else

}int

main

(void

)find_du()

; vector<

int> top =

topsort()

;for

(auto it : top) cout << it <<

" ";

return0;

}

鏈式前項星

存圖,存鍊錶的時候都一般會使用這個結構體陣列來實現資料的儲存。結構體實現 struct eedge max size edge tot 是乙個空節點 int tot,head max size tot是記憶體池指標,指向的是最近的乙個還沒有被使用的記憶體區域 head陣列裡面裝的是下標對應的edge...

拓撲排序(鏈式前向星 佇列實現)

拓撲排序 對於有向無環圖的排序,對於乙個有向無環圖來說,拓撲排序就是講該圖中的所有定點排成乙個線性順序。使得途中任意一對定點u和v,若存在邊關係,u在v之前。實現思路 1 從圖中選擇乙個入度為0的頂點,並輸出他 2 從圖中刪除該點,並且刪除該定點出發的所有有向邊 3 重複上述兩步 如下 includ...

python 拓撲排序 Python 拓撲排序

python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...