C 資料結構之拓撲排序 Leagal or Not

2021-08-20 02:40:22 字數 838 閱讀 6800

求乙個有向無環圖的拓撲排列:首先所有有入度的節點均不能排在第乙個。選擇乙個入度為0的節點作為序列的第乙個結點。當該節點被選為序列的第乙個結點後,將該點從圖中刪去,同時刪去以該結點為弧尾的所有邊,得到乙個新圖。那麼這個新圖的拓撲序列即為原圖的拓撲序列中除去第乙個結點後剩餘的序列。同樣,在新圖上選擇乙個入度為0的節點作為原圖的第二個節點,並在新圖中去以該結點為弧尾的所有邊,得到乙個新圖,重複同樣的方法,直到所有的結點和邊都從原圖中刪去。若在所有節點尚未被完全刪去時即出現了找不到入度為0的節點的情況,則說明剩餘的節點形成乙個環路,拓撲失敗,原圖無拓撲序列。我們使用佇列來儲存入度為0的節點。

1.leagal or not 。a是b的師傅,b是c**,c是a**,判讀圖是否為有向無環圖

輸入第一行m n,m人數,n表示關係數

3 20 1

1 22 2

0 11 0

輸出 yes no 

#include#include#includeusing namespace std;

vectoredge[501];

queueq;

int main()

while(m--)

while(q.empty()==false) q.pop();//清空上一組資料留下的資料

for(int i=0;iint cnt=0;

while(q.empty()==false)//當入度為0的邊未被取完的時候,重複

} } if(cnt==n) puts("yes");

else puts("no");

} return 0;

}

資料結構之拓撲排序

乙個簡單的求拓撲排序思路是 先找出任意乙個沒有入邊的頂點。然後列印出該頂點,並將它和它的邊一起從圖中刪除。然後,我們對圖的其餘部分採用同樣的方法處理。相應的我們可以定義乙個indegree 入度陣列 儲存所有頂點的入度。具體實現如下 鄰接表 define crt secure no warnings...

資料結構之拓撲排序

拓撲排序 topological order 是指,將乙個有向無環圖 directed acyclic graph簡稱dag 進行排序進而得到乙個有序的線性序列。這樣說,可能理解起來比較抽象。下面通過簡單的例子進行說明!例如,乙個專案包括a b c d四個子部分來完成,並且a依賴於b和d,c依賴於d...

資料結構之拓撲排序

感覺重點就是鄰接表的建立和tp toposort 函式中的乙個變數 的變化很奇妙,相當於是乙個靜態指標的用法。include include include include include include include include include define inf 0x3f3f3f3f d...