進階班例題

迷宮最短路徑

時間限制 1000 ms · 記憶體限制 256 MB · C++

給定一個 $H \times W$ 的迷宮地圖,由以下幾種字元組成:

  • S:起點
  • G:終點
  • .:可通行的格子
  • #:牆壁,不可通行

你只能上下左右移動一格,請找出從起點S到終點G的最短路徑長度。

保證輸入地圖中有且只有一個S與一個G,且保證起點S可達終點G。

輸入說明

  • 第一行輸入兩個整數 $H, W$。
  • 接下來 $H$ 行,每行一個長度為 $W$ 的字串。
  • $2 \leq H, W \leq 1000$

輸出說明

輸出從S到G的最短路徑長度。

範例

範例輸入 1

5 7
S.....#
#####.#
#...#.#
#.###.#
#.....G

範例輸出 1

10

範例輸入 2

6 6
S#...#
.#.#.#
.#.#.#
.#.#.#
.#.#.#
...#.G

範例輸出 2

20

範例輸入 3

3 4
S..#
##.#
..G#

範例輸出 3

4
C++77 / 50,000

「跑範例測資」只跑題目敘述上的範例,會顯示你的輸出與正確答案的對照; 「提交評測」會跑完整的測資並給實際結果,但不會顯示測資內容。兩者都不需要帳號,也不會留下成績紀錄。