現在你總共有 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 從隊頭刪除元...