leetcode207 課程表與拓撲排序

2021-10-05 05:42:27 字數 1169 閱讀 2821

簡單講就是,在乙個排序中,某些元素的存在依賴於另外的元素。或者說某些元素必須排在另外的元素後面。

比如說,穿衣服的時候,必須先穿褲衩,再穿秋褲,然後是棉褲和套在最外層的運動褲。而上身的背心和褲衩則沒有依賴關係。

1.廣度優先

簡單來講,就是始終把每次將入度為0的頂點去掉。

所以排序的結果就是[1,2,3,4,5]或者[1,2,4,3,5]。這個圖就是有向無環圖。

2.深度優先

從1開始,1->2->3->5或者1->2->4->5或者1->4->5

所以排序結果就是[1,2,3,4,5]或者[1,2,4,3,5]。這個圖是乙個有向無環圖。

三、leetcode 207.課程表與拓撲排序

1.典型的拓撲排序題。因為如果要學習b課程,就必須要先學習a課程。

按廣度優先來做:

2.建立乙個鄰接矩陣、乙個入度表和乙個佇列。鄰接矩陣的建立方法:二維的動態陣列。陣列的行是起始頂點,陣列的列是到達頂點。入度表就按技術排序的方法。

3.如果乙個數字的入度為0,就把它存到佇列中。之後把佇列中的數出隊,同時將原陣列長度-1,自然也將該數字的鄰接數的入度-1。

4.如果此時鄰接數有入度為0的,就繼續放入佇列,然後迴圈執行第三步,直到佇列中為空。

5.此時,如果陣列長度沒有減到0,說明有入度不為0的數,意味著是圖是有環的。如果陣列長度減到0了,說明沒有環,可以按照一定的順序將陣列中的數全部遍歷完。

6.**如下:

class

solution

for(

int[

] cp:prerequisites)

for(

int i=

0;i)while

(!queue.

isempty()

)return numcourses==0;

}}

LeetCode 207 課程表(拓撲排序)

你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse 1 在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?示例 1 輸入 2,1,0 輸...

leetcode 207 課程表 拓撲排序找環

執行用時 20 ms,在course schedule的c 提交中擊敗了99.80 的使用者 記憶體消耗 13.2 mb,在course schedule的c 提交中擊敗了18.08 的使用者 剛好看了劉汝佳老師的演算法競賽上面拓撲部分,想練練手。這個演算法的關鍵是flag訪問陣列中,使用了 1 0...

LeetCode題解 207 課程表

現在你總共有 n 門課需要選,記為 0 到 n 1。在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,判斷是否可能完成所有課程的學習?示例 1 輸入 2,1,0 輸出 true 解釋 總共有 2 門課程...