leetcode 207 課程表 拓撲排序找環

2021-09-24 05:26:53 字數 1034 閱讀 7055

執行用時 : 20 ms, 在course schedule的c++提交中擊敗了99.80% 的使用者

記憶體消耗 : 13.2 mb, 在course schedule的c++提交中擊敗了18.08% 的使用者

剛好看了劉汝佳老師的演算法競賽上面拓撲部分,想練練手。

這個演算法的關鍵是flag訪問陣列中,使用了:-1/0/1三個標誌

//拓撲排序

//使用標誌陣列進行訪問判別

//標誌陣列如果是1/0的,則會產生重複遍歷的消耗

//如果是-1/0/1的,就可以避免重複計算。

//1:從當前結點開始的拓撲是無環的

//0:還未遍歷過

//-1:正在遍歷

可以有效防止重複搜尋。(flag為1說明從該結點出發已經計算過了)。

class solution 

if(flag[i]==1)

//第一次訪問

flag[i]=-1;//正在訪問

for(int j=0;j拓展:leetcode 210. 課程表 ii 【在課程表 i的基礎上加上輸出的功能。dfs】

課程先後順序可以理解為乙個有向圖,有解的條件是此圖無環。因此我們可以依據其先後順序構造有向圖,並統計每門課程的入度(即其前一門課程的數量)。

然後將入度為0的所有課程壓入棧中,然後將這些課程的下一門課程的入度減1,減完**度為0則入棧。重複上述操作直到棧為空。如果最後存在入度不為為0的節點就說明有環,無解。

class solution

/* 初始化佇列 */

for (i = 0; i < numcourses; ++i)

while (!zeroq.empty())

} if (cnt != numcourses)

return empty_ans;

return ans;

}};

LeetCode 207 課程表(拓撲排序)

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

leetcode207 課程表與拓撲排序

簡單講就是,在乙個排序中,某些元素的存在依賴於另外的元素。或者說某些元素必須排在另外的元素後面。比如說,穿衣服的時候,必須先穿褲衩,再穿秋褲,然後是棉褲和套在最外層的運動褲。而上身的背心和褲衩則沒有依賴關係。1.廣度優先 簡單來講,就是始終把每次將入度為0的頂點去掉。所以排序的結果就是 1,2,3,...

LeetCode題解 207 課程表

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