切換
舊版
前往
大廳
主題

ZeroJudge - b518: 樹葉節點到根節點之路徑-商競103

Not In My Back Yard | 2019-04-27 23:34:59 | 巴幣 0 | 人氣 316

題目連結:


題目大意:
給定一正整數 N ,代表有 N 個測試資料。每個測試資料的第一列給定一正整數 m (1 ≦ m ≦ 80),代表有一棵樹節點數為 m 個。接下來的 m 列,每列有兩正整數 i 、 j (給定格式為i,j),代表節點 i 的父節點為 j 且若 i 為根節點的話,j = 99。

對於每棵樹,求從葉節點到根節點的路徑(不含葉節點和根節點本身)。若路徑上沒有任何內部節點,則輸出「N」;不然,輸出中間經過的節點。輸出格式參見範例輸出。



範例輸入:
2
7
0,99
1,3
2,3
3,5
4,6
5,0
6,5
4
0,99
1,0
2,0
3,0


範例輸出:
1:{3,5}
2:{3,5}
4:{6,5}

1:N
2:N
3:N


解題思維:
在輸入的時候就紀錄誰是根節點且紀錄各個節點的子節點與父節點。

輸入結束後便從根節點開始遞迴(採取深度優先搜尋(DFS)的方式)一直往葉節點的方向前進。一旦遇到葉節點(沒有子節點的節點),則開始往回(不是遞迴往回)走到根節點,並記錄走過的節點(但要記得挑掉葉節點和根節點本身)。將走過的節點之紀錄存起來,以便之後輸出,並將當前節點設為葉節點(用一布林值表示等等)。

最後,依編號順序跑過一次,判斷哪些是剛剛找到的葉節點。找到之後,就照著輸出格式輸出節點編號和路徑,但是如果路徑為空(沒有經過內部節點),則輸出「N」。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作