description
學生需要修讀完所有的課程才能畢業,這些課程之間有先導關係(比如要修讀資料結構,必須先修讀程式設計思想方法)。假設任意一門課程可以在任何乙個學期給滿足條件的學生選修,且學生每個學期可以選修的課程數不限。先給出一些課程與課程之間的關係,求能夠修完所有課程的最少學期數。
為簡化題目,約定:假設有n門課程,則這n門課程的編號分別為:1,2,……n。
資料保證不會出現環和自環(即總是可以合法地修完所有的課程,不會出現類似「1->1」或是「1->2->3->1」的情況)
input format
第1行:n m //正整數n ,代表課程的數量。非負整數m代表要給出幾個先導關係。
第2行到第1+m行: a b //每行兩個整數:代表要選修編號為a的課程,必須先修讀編號為b的課程。
output format
乙個整數,即修完所有課程的最少學期數。
sample input1
5 41 2
2 33 4
4 5sample output1
5sample input2
6 0sample output2
1sample input3
6 31 2
1 34 1
sample output3
3limits
0資料保證合法
#include
using
namespace std;
template
<
class
typeofver
,class
typeofedge
>
class
adjlistgraph};
struct vernode
};vernode* verlist;
intfind
(typeofver v)
const
public
:adjlistgraph
(int vsize)
;void
insert
(typeofver x, typeofver y, typeofedge w)
;void
deleteedg
(int x)
;int
answer()
;~adjlistgraph()
;};template
<
class
typeofver
,class
typeofedge
>
adjlistgraph
::adjlistgraph
(int vsize)
template
<
class
typeofver
,class
typeofedge
>
void adjlistgraph
::insert
(typeofver x, typeofver y, typeofedge w)
// 刪除指向verlist[i]的所有出邊
template
<
class
typeofver
,class
typeofedge
>
void adjlistgraph
::deleteedg
(int i)
}template
<
class
typeofver
,class
typeofedge
>
int adjlistgraph
::answer()
} semester++;}
return semester;
}template
<
class
typeofver
,class
typeofedge
>
adjlistgraph::~
adjlistgraph()
delete
verlist;
}int
main()
semester = a.
answer()
;}cout << semester;
return0;
}
#include
#include
"linkqueue.h"
using
namespace std;
template
<
class
typeofver
,class
typeofedge
>
class
adjlistgraph};
struct vernode }
; vernode* verlist;
intfind
(typeofver v)
const
public
:adjlistgraph
(int vsize)
;void
insert
(typeofver x, typeofver y, typeofedge w)
;void
topsort()
const;~
adjlistgraph()
;};template
<
class
typeofver
,class
typeofedge
>
adjlistgraph
::adjlistgraph
(int vsize)
template
<
class
typeofver
,class
typeofedge
>
void adjlistgraph
::insert
(typeofver x, typeofver y, typeofedge w)
template
<
class
typeofver
,class
typeofedge
>
void adjlistgraph
::topsort()
const
for(
int i =
0; i < vers;
++i)
for(
int i =
0; i < vers;
++i)
// 將入度為0的結點放入q1
if(indegree[i]==0
) q1.
enqueue
(i);
while
(true)if
(q2.
isempty()
)break
;++semester;
while
(!q2.
isempty()
)if(q1.
isempty()
)break
;++semester;
} cout << semester;
}template
<
class
typeofver
,class
typeofedge
>
adjlistgraph::~
adjlistgraph()
delete
verlist;
}int
main()
a.topsort()
;return0;
}
616 安排課程
2017.9.11 超時超時超時,去死吧 public class solution 建立所有的後序鍊錶。indegree計算所有的節點的入度。int indegree new int numcourses for int x prerequisites 找到乙個入度為0的節點,開始遍歷。int r...
安排課程 LintCode
你需要去上n門九章的課才能獲得offer,這些課被標號為 0 到 n 1 有一些課程需要 前置課程 比如如果你要上課程0,你需要先學課程1,我們用乙個匹配來表示他們 0,1 給你課程的總數量和一些前置課程的需求,返回你為了學完所有課程所安排的學習順序。可能會有多個正確的順序,你只要返回一種就可以了。...
leetcode 課程表I,課程表II
課程表 你這個學期必須選修 numcourse 門課程,記為 0 到 numcourse 1 在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?示例 1 輸入 2,1...