使用Adjacency list(很好懂的儲存圖的方法,不懂的可以去查一下)來存取題目給的星球(連結起來是一棵樹)
存取的時候我使用了map<int,vector<int>>
再用兩種DFS分別是
Step1:(DFS1):由上往下找最深子節點
Step2:(DFS2):由前一個DFS1得到的最深子節點往上推(在每一個父節點往下找不同的子節點,我個人是重複利用DFS1往下搜)
Step3:一直利用DFS2和DFS1來求 最初找到的最深子節點與任一點 的最長距離
*有可能父節點沒有其他子節點,這時候就將該根節點當成新的所求子節點進行DFS2
*DFS1的重複利用可能有點難懂,最根本就是從誰開始這個DFS1(誰開始往下找)。 最深子節點:根節點(相當於帝國首都) 由下節點往下找的子節點:父節點(相當於主星)
*如果這些都看不懂的新手,可以先去練一下其他DFS的題目。
這樣子的基礎題使用相互疊用的DFS對於我來說很難寫,但只要腦子能夠構築一次,用所學的方法存取、設計條件閘、回朔其實就很好解了。
加油!!!