切換
舊版
前往
大廳
主題

ZeroJudge - e571: 詞語接龍 解題心得

Not In My Back Yard | 2020-09-30 00:00:06 | 巴幣 2 | 人氣 156

題目連結:


題目大意:
輸入有多筆測試資料。每筆測資第一列給定一正整數 N (2 ≦ N ≦ 100,當 N = 0 時代表輸入結束),代表有一個由 N 個中文單詞組成的單詞表。

接著有 N 列輸入,每列一個中文詞(長度介於 2 ~ 10 個字,且每個中文詞的開頭皆相異、結尾也皆相異)。

試問這個單詞表裡的字詞(每個字詞至多使用一次)可以完成的最長詞語接龍之長度為何?

輸出最長接龍的長度,以及可以當作最長接龍的開頭字詞(若有多個,請依據輸入順序輸出);如果最長的接龍長度為 1 ,則再輸出「1」後,輸出一列「什麼爛表」(不須輸出字詞表的字詞)。輸出格式參見範例輸出。



範例輸入:
2
烏龜
龜裂
3
日復一日
我誰
瘋子
6
火上加油
加油站
油燈
燈火
色即是空
空即是色


範例輸出:
2
烏龜
1
什麼爛表
3
火上加油 油燈 燈火


解題思維:
就像昨天的題目判斷「之」、「是」一樣地去判斷每個字詞的結尾字與其他字詞的開頭字是否相同。如果是,則代表兩個字詞可以接在一起(注意不可以反著接)。

由上建出一個鄰接矩陣(Adjacency Matrix)或是鄰接表(Adjacency List),然後藉此窮舉開頭字詞,然後利用深度優先搜尋(Depth First Search)或是廣度優先搜尋(Breadth First Search)去完成接龍。

不過因為開頭皆相異、結尾也都相異,因此一個字詞最多只能接一個字詞,所以其實每個字詞只有一個接龍(如果一定要接到不能接的話)。這裡只是不失一般性的做法。

從上看哪個接龍的長度最長,以及哪些開頭可以獲得最長的接龍,即是所求。




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

創作回應

更多創作