問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
ここから先は深さ優先探索の問題を扱います。
深さ優先探索とは、移動することが不可能になるまで移動を繰り返した先の頂点を訪問し、
その後 1 つ前の頂点に戻るような操作を、移動できなくなるまで繰り返す探索のことです。
グリッドの行数 H と列数 W とマス (y,x) が与えられるので、深さ優先探索で 3 マス移動した後にいるマスの座標を順に出力してください。
移動の途中で端にぶつかった場合は、出力をせずにその移動を打ち切ってください。
なお、探索の際の移動は上,右,下,左の順におこなうものとし、グリッドの左上・右上・左下・右下のマスをそれぞれ (0,0), (0,W-1), (H-1,0), (H-1,W-1) とします。
例として、次の図のような入力について深さ優先探索の流れを紹介します。
赤いマスがスタート地点とします。
幅優先探索であれば、スタート地点から 1,2,3,4 の順にマスを訪問しますが、深さ優先探索は移動できなくなるまで 1 の方向に進み続けて、進めなくなったとき初めて 2,3,4 といった順にマスを訪問します。
図1
図2
図3
図4
図5
H W y x
・(y,x) から深さ優先探索順に 3 マス移動をした後にいるマスの座標 y, x を訪問順に改行区切りで出力してください。
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ H, W ≦ 100
・0 ≦ y < H
・0 ≦ x < W
7 7 3 3
0 3
1 4
2 3
1 2
1 4
2 5
3 4
2 3
2 3
3 4
4 3
3 2
1 2
2 3
3 2
2 1
1 4
2 5
3 4
2 3
2 5
3 6
4 5
3 4
3 4
4 5
5 4
4 3
2 3
3 4
4 3
3 2
2 3
3 4
4 3
3 2
3 4
4 5
5 4
4 3
4 3
5 4
6 3
5 2
3 2
4 3
5 2
4 1
1 2
2 3
3 2
2 1
2 3
3 4
4 3
3 2
3 2
4 3
5 2
4 1
2 1
3 2
4 1
3 0
2 2 0 0
0 1
1 0
0 1
1 0
0 1
1 0
0 1
1 0