問題
$ H \times W $ のマス目で表される迷路があります。
迷路の情報は文字列のリストとして表され、各文字は壁(‘#’) または 通過できる場所(‘.’)となります。
スタート座標からゴール座標までの最短移動回数を求めて下さい。
[制約]
🔹$ 1 \leqq H \leqq 100000 $
🔹$ 1 \leqq W \leqq 100000 $
解き方・ソースコード
前回記事と同様に幅優先探索を使ってこの問題を解いていきます。
前回記事ではqueueを使いましたが、今回はリストで代用します。
また、キューに格納したマス情報は削除せずに、追加した順番にキューの最後までチェックします。
上下左右にマスに移動する処理は関数化(push関数)し、壁の場合はパスし、通過できるマスの場合はコストを1つ増やして、そのマスをキューに追加しています。
cost配列(移動回数を管理)のインデックスは、0からではなく1から始まっています。
このため、push関数で引数に渡す座標値を $sx - 1, sy - 1, gx - 1, gy - 1$ にする必要があります。
[Google Colaboratory]
1 | #-------- 入力例1 --------- |
[実行結果(入力例1)]
解: 11
[実行結果(入力例2)]
解: 10
迷路に対する最短移動回数を求めることができました。