Description

你走過迷宮嗎?在一個複雜的地圖裡面,試圖摸索出走到出口的路線就是遊玩迷宮的目標。但你知道只要迷宮的結構夠簡單的話,是存在一套必勝法則的嗎?

這套必勝法則又被稱做「右手法則」,首先在進入地圖後,我們可以先把右手扶在牆上,接著只需要不斷地讓貼著牆壁行走,就會奇蹟似地抵達出口。

右手法則的解說圖,參考自維基百科

若要以程式的角度做解釋的話,我們可以假設迷宮是一張 N×M 的表格,其中起點在 (1,2)、終點在 (N,M1)。玩家一開始從 (1,2) 進入後,面向的方向會是 (+1,0),並將右手扶在 (1,1) 的牆壁上。接著,不斷進行以下過程:

  1. 若面向的方向遇到牆壁時,直接左轉並重新執行 i.。
  2. 前進一步。
  3. 若右手離開牆壁,直接右轉再前進一步,並回到 i.。

而根據當前的面向方向,右轉或左轉後面向的方向則是依據下列的關係圖:

(+1,0)左轉右轉(0,1)左轉右轉(1,0)左轉右轉(0,+1)左轉右轉(+1,0)

現在,請你撰寫一支程式,在輸入迷宮地圖的長相後,輸出從起點 (1,2) 靠著右手法則走到終點 (N,M1) 所需要的移動步數。請注意,左右轉並不算在步數內。

Input Format

輸入首行有兩個正整數 N,M,代表迷宮的長與寬。

接下來 N 行,每行一個長度為 M 的字串,皆由字元 .# 組成,其中我們以 . 當作空地、# 當作牆壁。

  • 3N,M200
  • 保證給定的迷宮地圖外圍除了 (1,2)(N,M1) 外皆為牆壁(#
  • 保證給定的迷宮地圖滿足 (1,2)(N,M1) 皆為空地 (.)
  • 保證給定的迷宮可以全程遵照右手法則走到出口

Output Format

輸出一個數字,代表使用右手法則從 (1,2) 走到 (N,M1) 的所需步數。

Sample Input 1

4 4
#.##
#..#
##.#
##.#

Sample Output 1

4

Sample Input 2

5 8
#.######
#..#.#.#
##...#.#
#......#
######.#

Sample Output 2

11

Hints

Problem Source

Subtasks

No. Testdata Range Constraints Score
1 0~1 範例測資 0
2 0~11 無額外限制 100

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 1000 524288 65536 1 2
1 1000 524288 65536 1 2
2 1000 524288 65536 2
3 1000 524288 65536 2
4 1000 524288 65536 2
5 1000 524288 65536 2
6 1000 524288 65536 2
7 1000 524288 65536 2
8 1000 524288 65536 2
9 1000 524288 65536 2
10 1000 524288 65536 2
11 1000 524288 65536 2