踩地雷數字
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\)。