グリッド上の最短経路

r 行 c 列のグリッドで表される迷路が与えられているとき、スタートのセルからゴールのセルまでの最短経路の長さを求める問題です。
迷路は以下のように表されています:
  • 床はドット (.)
  • 壁はハッシュ (#)
  • スタート地点は大文字の S
  • ゴール地点は大文字の E
壁ではない隣接セル(上下左右)であれば移動可能です。
スタートのセルからゴールのセルまでの最短経路の長さを見つけるのが目的です。

入力

最初の行には、2 つの整数 rc (1 ≤ r, c ≤ 1000) が与えられます。
続く r 行には、c 列分の文字が並んでおり、各セルは床 (.)、壁 (#)、スタート (S)、またはゴール (E) のいずれかです。グリッド全体で SE はそれぞれ 1 つだけ存在することが保証されています。

出力

プログラムは、S から E までの最短経路の長さを出力してください。もし S から E へ到達できる経路が存在しない場合は、Impossible を出力してください。

Input

5 8
########
##.S....
....#.#.
#......#
...#...E
Output

7
 
 
Tip
常にグラフを明示的に構築しなくても、グリッドのように暗黙的にグラフを表現して BFS を使うことができます。
Hint
グリッドをグラフとして扱い、スタートのセルから各セルへの最短距離を格納する 2 次元配列 d[][] を用いると良いでしょう。
 

Constraints

Time limit: 15 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue