四角のマスを縦横にならべた長方形の迷路があります。この迷路では東西南北の隣接するマスへ移動しながら、スタートのマスSを出発し、ゴールのマスGを目指します。マスの種類には、平原、山、氷の3種類があります。SとGは、平原のマスに置かれています。平原のマスには移動できますが、山のマスには移動できません。氷のマスは移動できますが、条件によって氷が割れ動けなくなります。
例えば、図1は与えられた迷路の最短経路のステップ数が 11 であることを示しています。
しかし、図2のように氷のマスを通って近道をしようとすると、大きさが6の氷の塊に対する4回目の移動後に動けなくなってしまいGには到達できません。
このような迷路の情報を入力とし、SからGまでの最短経路のステップ数を求めるプログラムを作成してください。マスの種類はそれぞれ以下の文字で表されます:
文字(半角) | マスの種類 |
---|---|
. (ピリオド) | 平原 |
#(シャープ) | 山 |
X | 氷 |
与えられる迷路は必ず解けるものとします。迷路はその東西方向のマスの数 X、南北方向のマスの数 Y と X × Y 個の文字として与えられます。
複数のデータセットが与えられます。入力の終わりはゼロふたつの行で示されます。各データセットは以下の形式で与えられます。
X Y line1 line2 : lineY
1行目に迷路の大きさを表す整数 X, Y (2 ≤ X, Y ≤ 12) が与えられます。続く Y 行に迷路の i 行目の情報 linei (長さ X の半角英文字列) が与えられます。
データセットの数は 40 を超えない。
データセットごとに、最小のステップ数を1行に出力します。
5 5 .X.S. .X#.. .XX## .#XG. ..X.. 7 3 SXX.XXG X.#.#X. XXX.XX# 4 4 S... X.X. GX.. ...X 10 10 ..XXXXX.XX .X.#.#X.XX SX.#X.X..X #X.##.X.XX ..XXXX#.XX ##.##.##XX ....X.XX#X .##X..#X#X ....XX#..X ...#XXG..X 0 0
11 10 10 33