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. 【SQL重温】面试之数据库基础练习

    简介 最近在练习SQL基础,首先感叹一下,在机器上写和在纸上写还是有区别的. 本文的练习题目请点击此链接进行查看:http://www.cnblogs.com/edisonchou/p/3878135 ...

  2. 安装和测试Kafka

    本文主要介绍如何在单节点上安装 Kafka 并测试 broker.producer 和 consumer 功能. 下载 进入下载页面:http://kafka.apache.org/downloads ...

  3. Python学习---Python下[字符串]的学习

    字符串[不可变] 重点方法: in count() center(50,'*') startswith('h') endwith('h') find('r') : 找不到返回 -1 index('r' ...

  4. ORACLE BACKUP AND RECOVERY

    ORACLE BACKUP AND RECOVERY http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/2day_ ...

  5. base64编码加密图片和展示图片

    base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于 网络传输.由于这些二进制字符在传输协议中属于控制字符, ...

  6. SAP CRM One Order跟踪和日志工具CRMD_TRACE_SET

    事务码CRMD_TRACE_SET激活跟踪模式: 在跟踪模式下运行One Order场景.运行完毕后,使用事务码CRMD_TRACE_EVAL: 双击参数,就能看到参数明细: 点Callstack也能 ...

  7. 应用服务&领域服务

    应用服务&领域服务 DDD理论学习系列——案例及目录 1. 引言 单从字面理解,不管是领域服务还是应用服务,都是服务.而什么是服务?从SOA到微服务,它们所描述的服务都是一个宽泛的概念,我们可 ...

  8. linux解压eclipse启动时无法找到jre环境的解决办法

    使用软链接的方法: 1.打开终端进入到eclipse安装主目录下:mkdir jre 2.cd jre 3.ln -s /home/zhoushuo/app/jdk1.8.0_102/bin bin

  9. [USACO07OPEN]吃饭Dining

    嘟嘟嘟 这应该是网络流入门题之一了,跟教辅的组成这道题很像. 把每一只牛看成书,然后对牛拆点,因为每一只牛只要一份,食物和饮料分别看成练习册和答案. #include<cstdio> #i ...

  10. 第六章.MyBatis缓存结构

    一级缓存 测试案例: MyBatisTest.java //缓存 @Test public void testFindCustomerCache1() throws Exception{ SqlSes ...