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】的更多相关文章

  1. Leetcode 542:01 矩阵 01

    Leetcode 542:01 矩阵 01 Matrix### 题目: 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . Given a matr ...

  2. [EOJ Monthly 2018.10][C. 痛苦的 01 矩阵]

    题目链接:C. 痛苦的 01 矩阵 题目大意:原题说的很清楚了,不需要简化_(:з」∠)_ 题解:设\(r_i\)为第\(i\)行中0的个数,\(c_j\)为第\(j\)列中0的个数,\(f_{i,j ...

  3. Leetcode 542.01矩阵

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

  4. MATLAB小函数:将列向量转化为0-1矩阵

    MATLAB小函数:将列向量转化为0-1矩阵 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 将列向量转化为0-1矩阵,例如 A = 1 2 1 5 3 ...

  5. 19牛客暑期多校 round2 H 01矩阵内第二大矩形

    题目传送门//res tp nowcoder 目的 给定n*m 01矩阵,求矩阵内第二大矩形 分析 O(nm)预处理01矩阵为n个直方图,问题转换为求n个直方图中的第二大矩形.单调栈计算,同时维护前二 ...

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

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

  7. 矩阵BFS

    leetcode 1091矩阵BFS 在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, ...

  8. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  9. 【leet-code】542. 01 矩阵

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

  10. Tricks(四十七)—— 布尔矩阵(0-1矩阵)取反

    假定 X 是一个 0-1 元素构成的布尔矩阵,则对其取反,0 变成 1,1 变为 0(True 变为 False,False 变成 True),只需要一步简单的操作: Y = (X == False)

随机推荐

  1. (完美解决)chatGPT登陆正常却无法发送消息

    这几天要写关于项目的文字性材料,登陆上chatgpt,结果发现登陆正常,各方面都正常,但是点击发送消息就会不停转圈圈,无法发送出去,然后联想到之前看到朋友圈有人说chatGPT崩了,就没多在意,结果今 ...

  2. 图数据库基准测试 LDBC SNB 系列讲解:Schema 和数据生成的机制

    LDBC(Linked Data Benchmark Council)Social Network Benchmark,简称 LDBC SNB,是一种针对社交网络场景的评估图数据库性能的基准测试. L ...

  3. 从0开始搭建开发环境 -实现servlet原生开发

    开发环境:  JDK1.8 + Servlet + Mysql 搭建项目 项目搭建参考博客 https://www.cnblogs.com/oyww-2027/p/15347137.html File ...

  4. 数据处理——IF函数求同时满足多个条件 多个条件满足一个以上

    以满足两个条件为例,满足多个条件类似 以如下案例为例进行说明: 一.IF公式同时满足多个条件 此例也可使用函数的嵌套,对于函数使用掌握不牢的新手,嵌套使用会有些困难,以下方法针对刚入门学习参考 1.利 ...

  5. cpprestsdk移植到mingw,项目上传至github

    如题 https://github.com/bbqz007/cpprestsdk4mingw 移植过程解决的问题,下面列出其中一些问题: 1. mingw对#pragma once支持不好. 须要在所 ...

  6. 《世嘉新人培训教材—游戏开发》2DGraphics1项目cmake构建

    <世嘉新人培训教材-游戏开发>作为经典的游戏开发教程,提供了相关样例代码供我们进行开发使用.但是该样例是基于VS进行编写构建的,而本人日常喜欢CLion进行C/C++开发,于是准备使用cm ...

  7. 记录--Loading 用户体验 - 加载时避免闪烁

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在切换详情页中有这么一个场景,点击上一条,会显示上一条的详情页,同理,点击下一条,会显示下一条的详情页. 伪代码如下所示: 我们定义了一个 ...

  8. 记录--五个有用的iframe踩坑问题,快收藏!

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 你不会还不知道iframe不能嵌入百度首页吧?为了丰富用户体验,我们常常会将其他网站的内容嵌入到自己的网页中.然而,随之而来的是一个常见的 ...

  9. 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第3章

    本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 暂无 本章释疑: 暂无,等待你的提问 致谢: MVP 林德熙 MVP 吕毅 sPhinX 相关链接 试读记录

  10. proteus的C51仿真

    Proteus的C51仿真 1.实验原理 Proteus是对C51仿真效果比较好的软件了,可以利用丰富的数字资源的外设实现比较接近实际的设计.仿真方法也比较简单,不需要下载,只需要将仿真文件导出到器件 ...