簡單講就是,在乙個排序中,某些元素的存在依賴於另外的元素。或者說某些元素必須排在另外的元素後面。
比如說,穿衣服的時候,必須先穿褲衩,再穿秋褲,然後是棉褲和套在最外層的運動褲。而上身的背心和褲衩則沒有依賴關係。
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 門課程...