2018 10 02拓撲排序

2021-08-28 16:11:49 字數 1459 閱讀 3638

拓撲排序:大學-高中階段自由選課

在圖論中,拓撲排序(topological sorting)是乙個有向無環圖(dag, directed acyclic graph)的所有頂點的線性序列。且該序列必須滿足下面兩個條件:

1.每個頂點出現且只出現一次。

2.若存在一條從頂點 a 到頂點 b ,則a為b的前序 。

tips:有向無環圖才有拓撲排序。

c++學習歷程(提高組必備):

語言->基礎演算法(高精度,列舉,分治等等)->搜尋->dp->資料結構(線性,樹,圖)

最重要的是:

多刷題!!!
複習:

1.入度:有幾條邊與它相連

2.佇列是神馬???

佇列用於線性表(主要),佇列可以理解為乙個陣列,f為隊首,先將f隊首指向0,隊尾為1

一.鄰接矩陣來做

#include

using

namespace std;

const

int maxn=

100+

5,maxm=

1000+5

;int a[maxn]

[maxn]

,rd[maxn]

,n,m;

//rd為入度

intmain()

for(

int i=

1;i<=n;i++

) cout<" ";

//輸出

for(

int j=

1;j<=n;j++)if

(a[k]

[j])

//如果它已經排過了

rd[j]--;

rd[k]=-

1;//這個點就沒用了

}return0;

}

二.用vector來做(用於稀疏圖)

**如下:

#include

using

namespace std;

const

int maxn=

10000+10

;int n,m,rd[maxn]

;vector<

int>a[maxn]

;//vector**好!!!

queue<

int>q;

//定義佇列

intmain()

for(

int i=

1;i<=n;i++)if

(rd[i]==0

) q.

push

(i);

//記住第乙個

while

(!q.

empty()

)}return0;

}

一道練習題:

已寫題解。

python 拓撲排序 Python 拓撲排序

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

python 排序 拓撲排序

在電腦科學領域中,有向圖的拓撲排序是其頂點的先行排序,對於每個從頂點u到頂點v的有向邊uv,在排序的結果中u都在v之前。如果圖是有向無環圖,則拓撲排序是可能的 為什麼不說一定呢?圖論 是組合數學的乙個分支,它和其他分支比如 群論 拓撲學 矩陣論有著密切的關係。圖是圖論的主要研究物件。圖是由若干給定的...

拓撲排序演算法

對許多資料結構教材實在不滿意,至少我是看不懂 至於拓撲排序演算法,教材上那些偽 真真教人頭暈。只寫了幾個struct結構,我根本看不出這是鄰接表。如果給出乙個清晰明了的圖,一切不就簡單了?總之,關鍵就是建立乙個鄰接表。然後利用這個表進行拓撲排序。邊表結點宣告 typedef struct edgen...