拓撲排序(dfs用棧,bfs用佇列)

2021-10-06 05:54:20 字數 1273 閱讀 5572

現在你總共有 n 門課需要選,記為 0 到 n-1。

在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用乙個匹配來表示他們: [0,1]

給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。

可能會有多個正確的順序,你只要返回一種就可以了。如果不可能完成所有課程,返回乙個空陣列。

示例 1:

輸入: 2, [[1,0]]

輸出: [0,1]

解釋: 總共有 2 門課程。要學習課程 1,你需要先完成課程 0。因此,正確的課程順序為 [0,1] 。

示例 2:

輸入: 4, [[1,0],[2,0],[3,1],[3,2]]

輸出: [0,1,2,3] or [0,2,1,3]

解釋: 總共有 4 門課程。要學習課程 3,你應該先完成課程 1 和課程 2。並且課程 1 和課程 2 都應該排在課程 0 之後。

因此,乙個正確的課程順序是 [0,1,2,3] 。另乙個正確的排序是 [0,2,1,3] 。

說明:dfs

class

solution

}else

if(visited[edge]==1

)}visited[node]=2

; res.

push_back

(node);}

vector<

int>

findorder

(int numcourses, vectorint>>

& prerequisites)

//開始遍歷;

for(

int i=

0;i!invaild;i++)}

if(invaild);}

reverse

(res.

begin()

,res.

end())

;return res;}}

;

bfs

思想更直接,更容易理解

class

solution

queue<

int>myq;

for(

int i=

0;iwhile

(!myq.

empty()

)}}if

(res.

size()

!=numcourses);}

return res;}}

;

拓撲排序的DFS和BFS

博主以前有乙個疑問,dfs和bfs各自的適用範圍是?我想你今天看了這篇文章之後會有乙個判斷!風格被我改為了c void topsort vector g topnum v counter 第counter 1個被遍歷到的 for int i iif g v i indgree i 用一句話來概括這個...

拓撲排序的DFS和BFS

博主以前有乙個疑問,dfs和bfs各自的適用範圍是?我想你今天看了這篇文章之後會有乙個判斷!風格被我改為了c void topsort vector g topnum v counter 第counter 1個被遍歷到的 for int i iif g v i indgree i 用一句話來概括這個...

用棧實現佇列 用佇列實現棧

棧的特點 filo firstinlastout 僅能從棧頂插入,刪除元素。最基本的介面包括push 從棧頂壓入元素 pop 從棧頂彈出元素 佇列的特點 fifo firstinfirstout 僅能從隊頭刪除元素,從隊尾插入元素。最基本的介面包括enque 從隊尾插入元素 deque 從隊頭刪除元...