01矩阵-【BFS】
01矩阵
给定一个由 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]
注意:
给定矩阵的元素个数不超过 10000。
给定矩阵中至少有一个元素是 0。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。
思路:
对每个值为0的点进行bfs,不断更新最短路径,因为元素个数不超过10000所以最长距离也就是199,先把res[][]数组的值设置成205即可,
记得要加标记数组,防止重复访问,会陷入死循环,我第一次就是忘记加了。 对0进行bfs搜索要比对1进行bfs搜索要好,因为前者更方便剪枝。
#include <iostream>
#include <math.h>
#include <queue>
#include <string.h>
using namespace std;
// 方向数组 上右下左
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
// 地图
int nums[105][105];
// 是否访问过 0代表没访问过,1代表访问过
int vis[105][105];
// 结果
int res[105][105];
// 地图长度
int n;
bool check(int x, int y)
{
// 判断在界内,并且没被访问过,并且值为1。(值为0的话,肯定是从0这个点向其他点扩展,比原先的点更近一点)
return x >= 0 && y >= 0 && x < n && y < n && vis[x][y] == 0 && nums[x][y] == 1;
}
void bfs(int x, int y)
{
res[x][y] = 0;
queue<pair<int, int>> q;
memset(vis, 0, sizeof(vis));
vis[x][y] = 1; //设置(x,y)访问过
q.push({x, y});
while (!q.empty())
{
// len++;
pair<int, int> t = q.front();
q.pop();
for (int i = 0; i < 4; i++)
{
int newx = t.first + dx[i];
int newy = t.second + dy[i];
if (check(newx, newy))
{
// 将新点标记访问过
vis[newx][newy] = 1;
// 上一个点的长度+1,便是bfs层数。 刷新最短距离。
res[newx][newy] = min(res[t.first][t.second] + 1, res[newx][newy]);
q.push({newx, newy});
}
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> nums[i][j];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
res[i][j] = 205;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (nums[i][j] == 0)
bfs(i, j);
cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << res[i][j] << " ";
cout << endl;
}
return 0;
}
01矩阵-【BFS】的更多相关文章
- Leetcode 542:01 矩阵 01
Leetcode 542:01 矩阵 01 Matrix### 题目: 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . Given a matr ...
- [EOJ Monthly 2018.10][C. 痛苦的 01 矩阵]
题目链接:C. 痛苦的 01 矩阵 题目大意:原题说的很清楚了,不需要简化_(:з」∠)_ 题解:设\(r_i\)为第\(i\)行中0的个数,\(c_j\)为第\(j\)列中0的个数,\(f_{i,j ...
- Leetcode 542.01矩阵
01矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 ...
- MATLAB小函数:将列向量转化为0-1矩阵
MATLAB小函数:将列向量转化为0-1矩阵 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 将列向量转化为0-1矩阵,例如 A = 1 2 1 5 3 ...
- 19牛客暑期多校 round2 H 01矩阵内第二大矩形
题目传送门//res tp nowcoder 目的 给定n*m 01矩阵,求矩阵内第二大矩形 分析 O(nm)预处理01矩阵为n个直方图,问题转换为求n个直方图中的第二大矩形.单调栈计算,同时维护前二 ...
- Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
542. 01 矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 ...
- 矩阵BFS
leetcode 1091矩阵BFS 在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, ...
- [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)
题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...
- 【leet-code】542. 01 矩阵
题目描述 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 ...
- Tricks(四十七)—— 布尔矩阵(0-1矩阵)取反
假定 X 是一个 0-1 元素构成的布尔矩阵,则对其取反,0 变成 1,1 变为 0(True 变为 False,False 变成 True),只需要一步简单的操作: Y = (X == False)
随机推荐
- Codeforces Round 928 (Div. 4)(A、B、C、D、E、G)
目录 A B C D E G A 统计A.B输出 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for ...
- linux下查看文件时显示行号
1.用 vi 或 vim 打开文件后显示行号: 显示当前行号: :nu 显示所有行号: :set nu 2.设置服务器显示行号 2.1:编辑~/.vimrc文件,在该文件中加入 ...
- elementPlus使用el-icon
按着文档来撒 yarn add @element-plus/icons-vue main.ts import * as ElementIcons from '@element-plus/icons-v ...
- Cordova下载文件,监听进度,退出疯狂报错
如题. 报错如下: W/cr_AwContents: Application attempted to call on a destroyed WebView java.lang.Throwable ...
- HttpClientHandler VS SocketsHttpHandler
.NET Framework 和 .NET Core 2.0 及更低版本中由 HttpClient 使用的默认消息处理程序为HttpClientHandler. 从 .NET Core 2.1 开始, ...
- CSharp的lambda表达式匿名类扩展方法
c#的lamba表达式 之前已经写过一些关于委托还有事件的文章,今天就来介绍一下lambda表达式. 首先定义需要的函数以及委托 { public delegate void DoNothingDel ...
- 自我总结的git的使用
git是什么 git是一个分布式版本控制工具,github是代码托管平台. git有什么用 保存文件的所有修改记录 使用版本号进行区分 随时可浏览历史版本记录 可还原到历史指定版本 对比不同版本的文件 ...
- (二)Linux环境的学习环境的搭建
Xshell的安装和连接 由于我们打算通过Xshell进行命令的输入,就不再进行VMWARE-TOOLS的安装. 我们直接进行安装Xshell 并开始连接我们创建的创建的虚拟机 我们可以通过Xshel ...
- 通达信金融终端解锁Level-2功能 续二 (非法调试 I say NO)
图一: 1. 破解后的逐笔分析可以不受条件正常运行. 2. 打开调试,被防止非法调试代码阻拦. 3. 只好关闭调试. 4. 立马spell符文 "Ship Sheep, Cheap Chip ...
- idea使用Mybatis Log查看执行的sql语句
参考,欢迎点击原文:https://www.jb51.net/article/195895.htm https://blog.csdn.net/qq2710393/article/details/83 ...