切換
舊版
前往
大廳
主題

ZeroJudge - c626: 貪食蛇 #1 ( 穿牆不可 ) 解題心得

Not In My Back Yard | 2019-03-08 22:42:32 | 巴幣 2 | 人氣 147

題目連結:


題目大意:
給定一個 21 列(rows)× 15 行(columns)以字元表示的地圖。 如果字元為
s 是剛出生的小蛇蛇,位於 x = 0 , y = 0(左上角的座標為 0, 0,往下 y 座標 + 1 、往右 x 座標 + 1)
o 是空格
$ 是食物,吃了之後蛇蛇會變長。
x 是障礙物,會阻止前進。

而蛇蛇無法翻出牆外(地圖外),蛇蛇也無法跨越自己的身體。跟一般的貪食蛇差不多。

給定完地圖後,下方一列是方向(N、E、S、W,分別代表上、右、下、左)及預計走的步數。但是蛇蛇不一定能走完所有的步數。

求當蛇蛇停下來之後,身體各部位的 x 、 y 座標。



範例輸入:
s$oooooooooo$oo$ooooo
oo$$o$oooxoo$oooo$o$o
$ooooo$oooxooooooo$oo
oooooo$oooo$ooo$ooooo
ooooooo$ooxo$o$oooooo
$oooo$oooxoo$ooo$$ooo
o$oooooooooo$oooooooo
ooo$ooo$ooxo$ooooxooo
ooooo$oooooooooo$oooo
ooooooo$o$oooo$oooooo
$oooxo$o$oooooooooooo
$o$ooooooooooooooxxoo
oo$oo$$ooooo$ooooo$oo
oooxooo$$o$oooooooooo
ooooo$oo$oooooooo$o$o
E 3 S 1 W 11 N 4 W 5


範例輸出:
0 1
1 1
2 1
3 1


解題思維:
也是一題流程控制。存取完地圖之後,判斷接下來的那行指令的每個方向以及步數。

N 代表往上(y 座標減少)、 E 代表往右(x 座標增加)、 S 代表往下(y 座標增加)和 W (x 座標減少)。而不管輸入為多少步,我們就一次一步一步來。

我們先將蛇蛇的各部位的 x 、 y 座標存起來,一開始蛇蛇只有一個部位且位於 x = 0 , y = 0 。

每次要讓蛇蛇往某個方向移動一格時,先檢查下一格有無超過邊界、有無碰到障礙物(字元 x )以及有無碰到自己的身體部位(以下以字元 s 作為蛇蛇的各個身體部位)。如果有碰到以上物件,則停下來。並輸出紀錄下來的各部位之 x 、 y 座標。

如果可以前進,則再檢查是否為字元 $ 。代表進到這格後,蛇蛇會變長。

接下來,假設蛇蛇有 n 個身體部位,那麼第一個身體部位(也就是頭)就要移動到下一格;而第二個部位則要移動到第一個原本在的位置……以此類推。

如果剛剛有吃到食物(字元 $),則身體部位會變為 n + 1 個,而 n + 1 個就會在第 n 個部位原本在的地方;如果沒吃到,則第n個部位原本在的位置要改為空格(字元 o)。

如果那一行指令都跑完了,代表蛇蛇停下來了,此時也要把各部位的 x 、y 座標輸出出來。

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

創作回應

相關創作

更多創作