切換
舊版
前往
大廳
主題

ZeroJudge - e585: 12797 - Letters 解題心得

Not In My Back Yard | 2020-01-01 18:59:31 | 巴幣 2 | 人氣 483

題目連結:


題目大意:
輸入有多筆測試資料。每筆開頭第一列給定一正整數 N (2 ≦ N ≦ 100),代表一個正方形公園之邊長。接著有 N 列輸入,每列給定 N 個字元(字元只會是前十個小寫、大寫字母,即 A ~ J 和 a ~ j ),代表這個公園的地圖。

設公園的左上角為(1, 1)、右下角為(N, N)。當邏輯城市裡的人穿過公園時走的路徑稱為一致路徑,其特徵為:當走過特定字元(例如小寫 c),則之後絕對不會走到該字元的另一個大小寫形式(像是走了小寫 c,就不會去走大寫 C ,只能再走小寫 c)。

對於給定的地圖,試問:最短的一致路徑之長度為何?如果沒有一致路徑,請輸出「-1」。



範例輸入:
6
DdaAaA
CBAcca
eEaeeE
bBbabB
DbDdDc
fFaAaC
7
aAaaaaa
aAaaaAa
aAaaaAA
aaAaAaa
AaAaaAa
aaAAaAa
aaaaaAa


範例輸出:
13
-1


解題思維:
直接在左上角使用深度優先搜尋(DFS),基本上會超時。而用 BFS 每延展一次要紀錄的東西又太複雜。

因此,我們可以先窮舉每一種字母的使用情形:從 ABCDEFGHIJ 、 ABCDEFGHIj 、 ABCDEFGHiJ 、 …… 到 abcdefghij。

再對每一種使用情況,從左上角用 BFS 擴散,像是這題。只是擴散的條件要包含題目提及的條件:不能走到其他大小寫的字母。而我們已經有窮舉走的大小寫的情況,因此記得要包含進條件裡。

如果每一種字母的使用情形都無法找到一條路從左上走到右下,則輸出「-1」;否則輸出過程中最短的路徑長度。

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

創作回應

更多創作