問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
グリッドとスタート地点のマス (sy,sx), ゴール地点のマス (gy,gx) が与えられるので、スタート地点から次の操作を繰り返してゴール地点に到達することができるかを判定してください。
また、ゴールできる場合は最短何マスの移動でゴールすることができるかを出力してください。
・現在いるマスを (y,x) としたとき、(y+1,x), (y-1,x), (y,x+1), (y,x-1) のいずれかのマスに移動する。
ただし、グリッドの外へは移動することができず、また、グリッド上の '#' のマスは壁であり、移動できないことに注意してください。
なお、グリッドの左上・右上・左下・右下のマスをそれぞれ (0,0), (0,W-1), (H-1,0), (H-1,W-1) とします。
H W
sy sx
gy gx
S_1
...
S_H
・(sy,sx) から移動をして (gy,gx) に到達することができる場合はゴールするまでの最短の移動マス数を、到達できない場合は "No" を 1 行で出力してください。
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ H, W ≦ 100
・0 ≦ sy < H
・0 ≦ sx < W
・0 ≦ gy < H
・0 ≦ gx < W
・マス(sy,sx), (gy,gx) は '.' である
・ S_i は W 文字の文字列(1 ≦ i ≦ H)
・ S_i の各文字は '.' または '#'(1 ≦ i ≦ H)
2 2
0 0
1 1
.#
#.
No
3 3
0 0
2 0
...
##.
...
6