基礎班例題

蒐集寶石-3

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

地圖上有一個機器人,機器人可以執行兩種動作:

  • 向前移動一格
  • 向右轉 90 度

初始狀態下,機器人面朝右方。機器人的移動規則如下:

  • 若前方不是牆壁或邊界 → 機器人會向前移動一格。
  • 若前方是牆壁或邊界 → 機器人會右轉 90 度。

對於本題,你的目標是追蹤機器人的移動,並且計算該機器人總共可以得到多少鑽石。

  • 當機器人向前移動到某一格,若該格存在鑽石,則會拾取 1 顆鑽石。

  • 若該格已經沒有鑽石,機器人將立即停止移動,程式結束。

  • 旋轉時不會拾取鑽石,只有在成功「前進到下一格的格子」時才可能撿到鑽石。

下面是範例測資一的移動過程:

蒐集寶石14.png

最後機器人在$(0,3)$的位置會發現沒有鑽石可以拾取了,所以機器人停下蒐集鑽石的動作並統計有多少鑽石。

以這個測資為例,總共獲得9顆鑽石

輸入說明

第一行給定兩個數字 $ N,M $ 代表地圖大小(row x column)

第二行輸入兩個數字 $ r,c $ 代表機器人的起始座標(左上角為 $(0,0)$)

第三行開始會輸入 $N$ 行,每行包含 $M$ 個整數 ($num$),數字與數字間彼此間格一個空個,表示地圖狀態

  • $1 \le N \le 100$,$2 \le M \le 100$
  • $0 \le r < N$
  • $0 \le c < M$
  • $num \in \{-1, 0, 1, \ldots, 5\}$,$-1$ 代表牆壁,正數代表該格的鑽石數(注意,有些格子可能沒鑽石)
  • 保證起點不會設置在牆壁格中
  • 機器人至少有兩個格子可以行走,不會都只卡在一個格子中

輸出說明

輸出機器人可以獲得多少鑽石

範例

範例輸入 1

3 4
1 0
-1 1 3 1
2 1 4 -1
3 -1 2 3

範例輸出 1

9
C++77 / 50,000

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