課程表:
你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse-1 。在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用乙個匹配來表示他們:[0,1]。給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?
示例 1:
輸入: 2, [[1,0]]
輸出: true
解釋: 總共有 2 門課程。學習課程 1 之前,你需要完成課程 0。所以這是可能的。
示例 2:
輸入: 2, [[1,0],[0,1]]
輸出: false
解釋: 總共有 2 門課程。學習課程 1 之前,你需要先完成課程 0;並且學習課程 0 之前,你還應先完成課程 1。這是不可能的。
輸入的先決條件是由 邊緣列表 表示的圖形,而不是鄰接矩陣 。 你可以假定輸入的先決條件中沒有重複的邊。 1 <= numcourses <=
10^5
思路:利用入度表和鄰接表進行拓撲排序
1.首先用乙個入度表來儲存所有課程的入度,用鄰接表儲存每種課程的後繼課程
2.將所有入度為0,即不需要先決條件的課程放入佇列中
3.當佇列中有元素時,將隊首元素出隊,用count表示已經學習過的課程,沒有乙個出隊,count++,然後所有出邊的入度減1,此時判斷是否有入度為0,如果是則入隊
4.當隊列為空時,意味著所有能學的課程學完,此時返回count==numcourse,即是否能夠學完
課程表ii:
現在你總共有 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
for(
int i=
0;isize()
;i++
) queue<
int> myque;
int count=0;
for(
int i=
0;i)while
(!myque.
empty()
)}return count==numcourses?ans:vector<
int>()
;}};
leetcode之課程表
你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse 1 在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?示例 1 輸入 2,1,0 輸...
html課程表頁面
效果圖 html 部分 charset utf 8 課程表title align center 課程表h2 caption class info align center valign middle 專案td colspan 5 align center valign middle 上課td col...
機器學習課程表
1.第一階段 基礎入門 3 6個月 入門的第一步是學習一些經典課程並配套經典書籍,一般來說這個過程在半年之內比較合適。在這個部分我介紹的課程和書籍都屬於難度非常低的,對數學和程式設計都沒什麼太大的要求。1.1.吳恩達cousera機器學習課程 1.2.python機器學習 introduction ...