這道題是典型的有向無(wú)環(huán)圖,注意數(shù)據(jù)存儲(chǔ)的是【當(dāng)前課:先修課】,所以當(dāng)我們用一個(gè)字典來(lái)存的時(shí)候,是以【先修課:后續(xù)課】存儲(chǔ)的
用一個(gè)數(shù)組來(lái)存儲(chǔ)每門(mén)課先修課的數(shù)量,也就是每個(gè)節(jié)點(diǎn)的入度indegreee
這樣存儲(chǔ)數(shù)據(jù)的好處是,每當(dāng)完成一門(mén)先修課的時(shí)候,說(shuō)明當(dāng)前課的先修課完成了一門(mén),對(duì)應(yīng)的節(jié)點(diǎn)入度-1,當(dāng)入度減少到0時(shí),說(shuō)明全部的先修課已經(jīng)上完,可以上當(dāng)前這門(mén)課了。
通過(guò)一個(gè)隊(duì)列,將每次入度為0 的節(jié)點(diǎn)加入,然后通過(guò)字典,找到需要學(xué)習(xí)這門(mén)先修課的后續(xù)課,對(duì)應(yīng)的節(jié)點(diǎn)入度-1。
最后結(jié)果,就是判斷是否所有的節(jié)點(diǎn)入度都是0,也就是完成所有課程,如果有一個(gè)節(jié)點(diǎn)不是的話,說(shuō)明存在環(huán),無(wú)法完成。

題目

圖解

207code

210題目
這道題相比于之前,就是要返回課程的順序。用一個(gè)數(shù)組,來(lái)存儲(chǔ)隊(duì)列彈出的順序即可。

210code