码迷,mamicode.com
首页 > 其他好文 > 详细

542.01矩阵

时间:2020-04-12 16:32:20      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:mat   poll   lin   none   链接   维护   技术   灵活   vector   

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

解题思路:
最开始的时候,我的思路是遍历所有的1,对于每个1,一层一层向外搜索,直至找到0,这样超时了。
看了大佬们的讲解,思路豁然开朗.
首先遍历matrix,对于非零点,设置一个较大值(row+col)
维护一个队列,首先将所有零点的坐标放入队列中
取出队列中的元素(i,j),搜索(i,j)的四个方向,如果某方向上的值大于或等于(matrix[i][j]+1),就将该方向的坐标值更新为matrix[i][j]+1,这是局部正确的。
然后将该方向的坐标加入队列
重复3-4步骤,直到队列为空。
作者:ccdmw
链接:https://leetcode-cn.com/problems/01-matrix/solution/bfs-by-ccdmw-5/
来源:力扣(LeetCode)
技术图片
 1 class Solution {
 2     public int[][] updateMatrix(int[][] matrix) {
 3         int row = matrix.length;
 4         int col = matrix[0].length;
 5         //灵活应对四个方向的变化
 6         int[][] vector = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
 7         Queue<int[]> queue = new LinkedList<>();
 8         for (int i = 0; i < row; i++) {
 9             for (int j = 0; j < col; j++) {
10                 if (matrix[i][j] == 0) {
11                     // 将所有 0 元素作为 BFS 第一层
12                     queue.add(new int[]{i, j});
13                 } else {
14                     //设一个最大值
15                     matrix[i][j] = row + col;
16                 }
17             }
18         }
19         while (!queue.isEmpty()) {
20             int[] s = queue.poll();
21             // 搜索上下左右四个方向
22             for (int[] v : vector) {
23                 int r = s[0] + v[0];
24                 int c = s[1] + v[1];
25                 if (r >= 0 && r < row && c >= 0 && c < col){
26                     if (matrix[r][c] >= matrix[s[0]][s[1]] + 1){
27                         matrix[r][c] = matrix[s[0]][s[1]] + 1;
28                         queue.add(new int[]{r, c});
29                     }
30                 }
31             }
32         }
33         return matrix;
34     }
35 }
View Code

 




542.01矩阵

标签:mat   poll   lin   none   链接   维护   技术   灵活   vector   

原文地址:https://www.cnblogs.com/szzla/p/12685782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!