class Solution {
public:
vector<vector<int>> res;
int m, n;
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
m = matrix.size(); if (m == ) return res;
n = matrix[].size(); if (n==) return res;
res = vector<vector<int>>(m, vector<int>(n, INT_MAX));
queue<pair<int,int>> q;
static int dirs[] = { -, , , , - };
for (int i = ; i < m; i++)
for (int j = ; j < n; j++)
if (matrix[i][j] == ) {
res[i][j] = ;
q.push({i,j});
}
while (!q.empty()) {
auto p = q.front();
q.pop();
for (int k = ; k < ; k++) {
int x = p.first + dirs[k];
int y = p.second + dirs[k+];
if (x < || y < || x >= m || y >= n || res[p.first][p.second] + >= res[x][y]) continue;
res[x][y] = res[p.first][p.second] + ;
q.push({x, y});
}
}
return res;
}
}; /* DFS: slow
class Solution {
public:
vector<vector<int>> res;
int m, n;
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
m = matrix.size(); if (m == 0) return res;
n = matrix[0].size(); if (n==0) return res;
res = vector<vector<int>>(m, vector<int>(n, INT_MAX));
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (matrix[i][j] == 0) {
res[i][j] = 0;
dfs(matrix, i, j);
}
return res;
}
void dfs(vector<vector<int>>& mx, int i, int j) {
static int dirs[] = { -1, 0, 1, 0, -1 };
for (int d = 0; d < 4; d++)
{
int x = i + dirs[d];
int y = j + dirs[d+1];
if (x < 0 || x >= m || y < 0 || y >= n || res[i][j] + 1 >= res[x][y]) continue;
res[x][y] = res[i][j] + 1;
dfs(mx, x, y);
}
}
};
*/ /* each point BFS: too slow
class Solution {
public:
vector<vector<int>> res;
int m, n;
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
m = matrix.size(); if (m == 0) return res;
n = matrix[0].size(); if (n==0) return res;
res = vector<vector<int>>(m, vector<int>(n, INT_MAX));
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
helper(matrix, i, j);
return res;
}
void helper(vector<vector<int>>& mx, int i, int j) {
static int dirs[] = { -1, 0, 1, 0, -1 };
if (mx[i][j] == 0) {
res[i][j] = 0;
return;
}
vector<vector<bool>> v(m, vector<bool>(n, false));
queue<pair<int,int>> q;
q.push({i,j});
v[i][j] = true;
int lv = 0;
while (!q.empty()) {
int qs = q.size();
lv++;
while (qs-- > 0) {
auto p = q.front();
q.pop();
for (int k = 0; k < 4; k++) {
int x = p.first + dirs[k];
int y = p.second + dirs[k+1];
if (x < 0 || y < 0 || x >= m || y >= n || v[x][y]) continue;
if (mx[x][y] == 0) {
res[i][j] = lv;
return;
}
else {
q.push({x, y});
v[x][y] = true;
}
}
}
}
}
};
*/

542. 01 Matrix的更多相关文章

  1. leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings

    542. 01 Matrix https://www.cnblogs.com/grandyang/p/6602288.html 将所有的1置为INT_MAX,然后用所有的0去更新原本位置为1的值. 最 ...

  2. [leetcode] 542. 01 Matrix (Medium)

    给予一个矩阵,矩阵有1有0,计算每一个1到0需要走几步,只能走上下左右. 解法一: 利用dp,从左上角遍历一遍,再从右下角遍历一遍,dp存储当前位置到0的最短距离. 十分粗心的搞错了col和row,改 ...

  3. LeetCode 542. 01 Matrix

    输入:只包含0,1的矩阵 输出:元素1到达最近0的距离 算法思想:广度优先搜索. 元素为0为可达区域,元素为1为不可达区域,我们的目标是为了从可达区域不断地扩展至不可达区域,在扩展的过程中,也就计算出 ...

  4. 542 01 Matrix 01 矩阵

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离.两个相邻元素间的距离为 1 .示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0 示例 2:输入: ...

  5. Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)

    542. 01 矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 ...

  6. [Leetcode Week10]01 Matrix

    01 Matrix 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/01-matrix/description/ Description Given a ...

  7. 计算机学院大学生程序设计竞赛(2015’12)01 Matrix

    01 Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. hdu 01 Matrix

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  9. 【LeetCode】01 Matrix 解题报告

    [LeetCode]01 Matrix 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/01-matrix/#/descripti ...

随机推荐

  1. Grunt 使用(一)基础搭建

    jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!废话不多说,直接上干货. 1.安装node.js并检查node -v 和 n ...

  2. June 21st 2017 Week 25th Wednesday

    Discontent is the first step in progress. 不知足是前进中的第一步. Several days ago, I wrote down a quote which ...

  3. 简单封装的ajax请求

    简单封装了一个ajax请求,做一下统一处理,少写重复代码,只是一个初步的代码,没有经过优化. $.extend({ myAjax: function (option, rollBack) { var ...

  4. Ubuntu16.04更换NVIDIA驱动导致无法进入图形界面的解决方案

    一.进入recovery模式 由于无法进入图形界面,所以需要在开机时进入恢复模式.我的机器上时在开机时通过引导选项中的recovery mode选项进入,进入之后可以看到许多选项卡,选择root,回车 ...

  5. android之对于view的一点深入理解

    最近在写程序中,遇到了之前自己没遇到过的代码,一番理解后才知道原来是在动态设定xml布局中的属性.即利用LayoutParams可以动态的设定布局或者控件的宽和高,以及的它的左间距,右间距,内间距,和 ...

  6. ADFUtils

    import java.text.SimpleDateFormat; import java.util.Map; import javax.el.ELContext;import javax.el.E ...

  7. Adobe flash player 因过期而遭到阻止解决办法

    最近使用谷歌浏览器时总是提示Adobe flash player 因过期而遭到阻止,这让人很头痛,基本上就是打开一个网页就会弹出一个提示,下面是解决办法. 问题的截图界面: 解决方法:在chrome浏 ...

  8. Git Brash在Windows下乱码问题

    ,/etc/gitconfig: [gui] encoding = utf- #代码库统一用urf-8,在git gui中可以正常显示中文 [i18n] commitencoding = GB2312 ...

  9. [转]CUDA在Windows下的软件开发环境搭建

    引自:http://www.makaidong.com/yaoyuanzhi/archive/2010/11/13/1876215.html 本文我们以visual studio 2005 为例演示c ...

  10. spring AOP 代理(静态与动态+使用cglib实现)

    一.没有代理模式 缺点: 1.工作量特别大,如果项目中有多个类,多个方法,则要修改多次. 2.违背了设计原则:开闭原则(OCP),对扩展开放,对修改关闭,而为了增加功能把每个方法都修改了,也不便于维护 ...