踩地雷數字

0.5s 256M

請實作以下函式:

vector<vector<int>> count_neighbors(const vector<string>& grid, int mode);

grid 是一張 \(H\times W\) 的地圖,# 代表地雷,. 代表空地。

對地圖上的每一個格子 \((r,c)\),不論該格本身是 # 還是 .,請數一數它的鄰格中有幾個 #:

  • mode = 4:鄰格是上、下、左、右四格。
  • mode = 8:鄰格除了上述四格,也包含左上、右上、左下、右下四格。

超出地圖範圍的位置不是鄰格。請回傳大小恰為 \(H\times W\) 的二維 vector<int>,其中 result[r][c] 是格子 \((r,c)\) 的答案。格子本身不算自己的鄰格。

題目提供的標頭檔已讓 string 與 vector 可以直接使用。你只需要實作指定函式,不需要撰寫 main 或處理輸入與輸出。

輸入格式

本節描述評測程式如何呼叫你的函式。

第一行有一個正整數 \(T\),代表函式呼叫次數。

每次呼叫先有一行三個整數 \(H,W,mode\),接著有 \(H\) 行長度為 \(W\) 的字串,代表 grid。

限制

  • \(1 \le T \le 100\)
  • \(1 \le H,W \le 100\)
  • grid 中每個字元都是 . 或 #
  • mode 是 4 或 8

輸出格式

每次函式呼叫後,評測程式會輸出 \(H\) 行,每行 \(W\) 個整數,表示回傳的二維 vector<int>。

範例輸入

2
3 3 4
.#.
##.
...
3 3 8
.#.
##.
...

範例輸出

2 1 1
1 2 1
1 1 0
3 2 2
2 2 2
2 2 1

範例解釋

第一張輸出表使用四鄰格,第二張使用八鄰格。以 \((0,0)\) 為例,它的右方與下方都是地雷,所以四鄰格答案是 \(2\);八鄰格還會多算右下方的地雷,所以答案是 \(3\)。

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。