配点 : 500 点
問題文
縦 H 行、横 W 列のマス目があり、上から i(1≤i≤H) 行目、左から j(1≤j≤W) 列目のマスを (i,j) と表します。
各マスは「始点」「道」「障害物」のいずれかです。
マス (i,j) の状態は文字 Ci,j で表され、Ci,j= S なら始点、Ci,j= . なら道、Ci,j= # なら障害物です。始点のマスはただ一つ存在します。
始点のマスを出発し、上下または左右に隣接するマスに移動することを繰り返して、障害物のマスを通らずに始点のマスへ戻ってくるような長さ 4 以上の経路であって、最初と最後を除き同じマスを通らないようなものが存在するか判定してください。
より厳密には、以下の条件を満たす整数 n およびマスの列 (x0,y0),(x1,y1),…,(xn,yn) が存在するか判定してください。
- n≥4
- Cx0,y0=Cxn,yn=
S
- 1≤i≤n−1 ならば Cxi,yi=
.
- 1≤i<j≤n−1 ならば (xi,yi)=(xj,yj)
- 0≤i≤n−1 ならばマス (xi,yi) とマス (xi+1,yi+1) は上下または左右に隣接する
制約
- 4≤H×W≤106
- H,W は 2 以上の整数
- Ci,j は
S、.、# のいずれか
- Ci,j=
S となる (i,j) がただ一つ存在する
入力
入力は以下の形式で標準入力から与えられる。
H W
C1,1…C1,W
⋮
CH,1…CH,W
出力
問題文の条件を満たす経路が存在するならば Yes を、存在しないならば No を出力せよ。
4 4
....
#.#.
.S..
.##.
Yes
$(3, 2) \rightarrow (2, 2) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (1, 4) \rightarrow (2, 4) \rightarrow (3, 4) \rightarrow (3, 3) \rightarrow (3, 2)$ という経路が条件を満たします。
2 2
S.
.#
No
5 7
.#...#.
..#.#..
...S...
..#.#..
.#...#.
No