SJTU安排課程表

2021-10-06 22:00:21 字數 3914 閱讀 4145

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...