207. Course Schedule
這題就是標準的拓樸排序
但就這樣乖乖照著寫有點無聊
所以我們來利用 C++ 的 shared_ptr
因為 shared_ptr 只要沒有人指向他就會自己消滅
所以我們只要維護 adj, 其中
adj[a] = {Pointers[b], Pointers[c]}
代表要修 b c 之前必須修過 a, 也就是存在邊 [b, a], [c, a]
這樣沒有先修課 a 的就不會有人指向他
就會去呼叫 destructor
此時我們只要在 destructor 裡把 adj[a] 清空
如果有人因此變得沒人指向他的話就會接著呼叫他的 destructor
可以說跟這題完美契合
事情都讓 shared_ptr 做完了
最後只要算一下呼叫了幾次 destructor 就好
:)