幅優先探索ドリルのサムネイル
(問題 3)グリッド(障害物あり)BFS(4方向) PHP編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

整数 N, M, S, T が与えられます。N 行 M 列のグリッドがあります。上から i (1 ≦ i ≦ N) 行目、左から j (1 ≦ j ≦ M) 列目のマスを (i, j) と表記します。

また、N 個の長さ M の文字列 L_1,...,L_N が与えられます。L_i (1 ≦ i ≦ N) の j (1 ≦ j ≦ M) 文字目が # のときは (i, j) に障害物があることを、. のときは (i, j) に障害物がないことを意味します。

グリッドのそれぞれのマスに書く文字を以下のように定めます。

・そのマスに障害物がある場合には #。

・そうでない場合は (S, T) から左右上下の 4 方向に移動することを考えた時にそのマスにたどり着くまでに必要な移動の最小回数を 10 で割った余り。ただし、障害物があるマスには移動が出来ず、たどり着くことが出来ないマスは . とする。

文字を書き込んだ後のグリッドを求めてください。

入力される値

N M S T
L_1
L_2
...
L_N


1 行目には 4 つの整数 N, M, S, T が与えられます。

1 + i (1 ≦ i ≦ N) 行目には 1 つの文字列 L_i が与えられます。

入力は合計で 1 + N 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

答えを N 行で出力してください。

i (1 ≦ i ≦ N) 行目には長さ M の文字列を出力してください。i (1 ≦ i ≦ N) 行目の文字列の j (1 ≦ j ≦ M) 文字目は (i, j) に書き込んだ文字と一致している必要があります。

条件

すべてのテストケースにおいて、以下の条件をみたします。

  • 1 ≦ S ≦ N ≦ 100

  • 1 ≦ T ≦ M ≦ 100

  • L_i は # と . で構成された長さ M の文字列 (1 ≦ i ≦ N)

  • L_S の T 文字目は .
  • 入力例1

    5 5 3 3
    .....
    #.#.#
    ...#.
    .#..#
    .....

    出力例1

    43456
    #2#6#
    210#.
    3#12#
    43234

    入力例2

    1 11 1 1
    ...........

    出力例2

    01234567890

    問題一覧へ戻る

    1. paizaトップ
    2. レベルアップ問題集
    3. 幅優先探索ドリル(言語選択)
    4. 問題一覧 PHP編
    5. (問題 3)グリッド(障害物あり)BFS(4方向) PHP編
    ページの先頭へ戻る