題目詳情
給定一個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。
兩個相鄰元素間的距離爲 1 。
示例 1:
輸入:
0 0 0
0 1 0
0 0 0
輸出:
0 0 0
0 1 0
0 0 0
示例 2:
輸入:
0 0 0
0 1 0
1 1 1
輸出:
0 0 0
0 1 0
1 2 1
注意:
- 給定矩陣的元素個數不超過 10000。
- 給定矩陣中至少有一個元素是 0。
- 矩陣中的元素只在四個方向上相鄰: 上、下、左、右。
——題目難度:中等
思路如下圖:
-解題代碼
class Solution {
private:
/*分別對應往上走、往下走、往左走、往右走*/
int dir[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}};
public:
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
/*行數用n來表示,列數用m來表示*/
int n = matrix.size(), m = matrix[0].size();
vector<vector<int>> dist(n, vector<int>(m));
vector<vector<int>> used(n, vector<int>(m));
queue<pair<int,int>> que;
/*把0的位置加入隊列*/
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(matrix[i][j] == 0) {
que.push(pair<int,int>(i, j));
used[i][j] = 1;
}
}
}
/*廣度優先搜索*/
while (!que.empty()) {
pair<int,int> tmp = que.front();
int i = tmp.first;
int j = tmp.second;
que.pop();
for(int k=0;k<4;k++)
{
int h = i + dir[k][0];
int l = j + dir[k][1];
if(h >= 0 && h < n && l >=0 && l < m && !used[h][l]) {
dist[h][l] = dist[i][j] + 1;
que.push(pair<int,int>(h,l));
used[h][l] = 1;
}
}
}
return dist;
}
};
結果