542. 01 矩阵(C++)---宽度优先搜索解题

题目详情

给定一个由 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


注意:

  1. 给定矩阵的元素个数不超过 10000。
  2. 给定矩阵中至少有一个元素是 0。
  3. 矩阵中的元素只在四个方向上相邻: 上、下、左、右。



——题目难度:中等


 



思路如下图:

542. 01 矩阵(C++)---宽度优先搜索解题_第1张图片




-解题代码 
 

class Solution {
private:
	/*分别对应往上走、往下走、往左走、往右走*/ 
	int dir[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}};
	
public:
    vector> updateMatrix(vector>& matrix) {
    	/*行数用n来表示,列数用m来表示*/ 
    	int n = matrix.size(), m = matrix[0].size();
		vector> dist(n, vector(m));
		vector> used(n, vector(m));
		queue> que;
		
		/*把0的位置加入队列*/ 
		for(int i=0;i(i, j));
					used[i][j] = 1;
				}
			}
		}
		
		/*广度优先搜索*/
		while (!que.empty()) {
			pair 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(h,l));
					used[h][l] = 1;
				}
			}
		}
		
		return dist;			
    }
};

结果
542. 01 矩阵(C++)---宽度优先搜索解题_第2张图片

你可能感兴趣的:(#,bfs,LeetCode-解题记录)