基礎班例題
蒐集寶石-3
時間限制 1000 ms · 記憶體限制 256 MB · C++
地圖上有一個機器人,機器人可以執行兩種動作:
- 向前移動一格
- 向右轉 90 度
初始狀態下,機器人面朝右方。機器人的移動規則如下:
- 若前方不是牆壁或邊界 → 機器人會向前移動一格。
- 若前方是牆壁或邊界 → 機器人會右轉 90 度。
對於本題,你的目標是追蹤機器人的移動,並且計算該機器人總共可以得到多少鑽石。
當機器人向前移動到某一格,若該格存在鑽石,則會拾取 1 顆鑽石。
若該格已經沒有鑽石,機器人將立即停止移動,程式結束。
旋轉時不會拾取鑽石,只有在成功「前進到下一格的格子」時才可能撿到鑽石。
下面是範例測資一的移動過程:

最後機器人在$(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
「跑範例測資」只跑題目敘述上的範例,會顯示你的輸出與正確答案的對照; 「提交評測」會跑完整的測資並給實際結果,但不會顯示測資內容。兩者都不需要帳號,也不會留下成績紀錄。