542. 01 Matrix
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的更多相关文章
- 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的值. 最 ...
- [leetcode] 542. 01 Matrix (Medium)
给予一个矩阵,矩阵有1有0,计算每一个1到0需要走几步,只能走上下左右. 解法一: 利用dp,从左上角遍历一遍,再从右下角遍历一遍,dp存储当前位置到0的最短距离. 十分粗心的搞错了col和row,改 ...
- LeetCode 542. 01 Matrix
输入:只包含0,1的矩阵 输出:元素1到达最近0的距离 算法思想:广度优先搜索. 元素为0为可达区域,元素为1为不可达区域,我们的目标是为了从可达区域不断地扩展至不可达区域,在扩展的过程中,也就计算出 ...
- 542 01 Matrix 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离.两个相邻元素间的距离为 1 .示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0 示例 2:输入: ...
- Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
542. 01 矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 ...
- [Leetcode Week10]01 Matrix
01 Matrix 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/01-matrix/description/ Description Given a ...
- 计算机学院大学生程序设计竞赛(2015’12)01 Matrix
01 Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 01 Matrix
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- 【LeetCode】01 Matrix 解题报告
[LeetCode]01 Matrix 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/01-matrix/#/descripti ...
随机推荐
- Android-删除指定包名的App
/** * check and delete the old package app if it exists. */ private void checkOldPackage() { String ...
- IEEP-OSPF域内路由故障-现象与排障思路
OSPF域内路由故障-现象与排障思路 一.故障现象 OSPF的或内路由故障常表现为邻居路由器不通告部分或全部路由,可能的原因通常为: 1).拟通告的接口上未启用OSPF 2).拟通告的接口被关闭 OS ...
- DedeCms织梦后台管理员密码修改和忘记重置方法
方法/步骤 打开dede_admin数据表: 进入你的MYSQL后台,然后在你的数据库名中,找到dede_admin这项如图,pwd下的值就是你的密码,织梦密码采取的是MD5加密,破解麻烦而且没有必要 ...
- Windows 10 KMS 手工激活
第一.安装好Win10系统,不需要安装其他激活工具.第二.是删除默认序列号,打开命令提示符(管理员),运行 slmgr.vbs -upk,可提示已卸载了序列号. slmgr /ipk W269N-WF ...
- 关于cmake输出动态链接库名字的问题
使用cmake进行项目编译管理时,我们经常使用 add_library(foo SHARED foo.cpp) 这样的话,输出时,如果在win下面会得到foo.dll,linux下面会得到libfoo ...
- IIS 7.5+FCK编辑器+burp suite神器拿webshell
本人小菜一枚,大牛勿喷 看图: 一个越南狗的网站,看了看好多人来过哦,估计都是在这跪下了,试了好多别人上传滴都不行,看了看是IIS7.5,难怪都卡在这里了,于是小编直接上神器Burp Suite- 截 ...
- UVa 1262 - Password(解码)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- yolo2 anchor选择校招总结
使用kmeans的聚类算法选择数据集最可能的anchor size和ratio.K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大. ...
- P2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver
P2213 [USACO14MAR]懒惰的牛The Lazy Cow_Sliver 最大化一个子矩阵的和. 我们如何去做,dp和贪心呀! 大体题意:给定一个正方形,然后在正方形中求出一个大小已经给定的 ...
- 前端基础-CSS如何布局以及文档流
一. 网页布局方式 二. 标准流 三. 浮动流 四. 定位流 一. 网页布局方式 1.什么是网页布局方式 布局可以理解为排版,我们所熟知的文本编辑类工具都有自己的排版方式, 比如word,nodpad ...