【LeetCode286】墙与门(BFS)
一、题目
给定一个 m × n 的二维网格,网格中有以下三种可能的初始化值:
-1 表示墙或是障碍物
0 表示一扇门
INF 无限表示一个空的房间。然后,我们用 2 31 2^{31} 231 - 1 = 2147483647 代表 INF。你可以认为通往门的距离总是小于 2147483647 的。
你要给每个空房间位上填上该房间到 最近门的距离,如果无法到达门,则填 INF 即可。
样例1:
输入:
[[2147483647,-1,0,2147483647],[2147483647,2147483647,2147483647,-1],[2147483647,-1,2147483647,-1],[0,-1,2147483647,2147483647]]输出:
[[3,-1,0,1],[2,2,1,-1],[1,-1,2,-1],[0,-1,3,4]]解释:
2D网络为:
INF -1 0 INF
INF INF INF -1
INF -1 INF -10 -1 INF INF答案为:3 -1 0 12 2 1 -11 -1 2 -10 -1 3 4
二、思路
(1)先将所有门入队,从所有门开始BFS,入队的是点坐标,可以用pair
结构。
(2)入队时更新距离,而不是出队时,防止重复入队。
(3)更新的条件是rooms[newx][newy] > rooms[x][y] + 1
,这里的rooms[x][y] + 1
在本轮次(从该当前门开始BFS)遍历中本该属于该节点的树高度,如果这个高度(路径)更小自然就要更新了。
三、代码
class Solution {private:vector<pair<int, int>>directions{{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
public:void wallsAndGates(vector<vector<int>>& rooms) {if(rooms.empty()){return;}int row = rooms.size();int col = rooms[0].size(); queue<pair<int, int>> q;//先将所有门入队for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){if(rooms[i][j] == 0){q.push(make_pair(i, j));}}}while(!q.empty()){pair<int, int>a = q.front();int x = a.first, y = a.second;q.pop();for(auto dir: directions){int newx = x + dir.first, newy = y + dir.second;if(isarea(rooms, newx, newy) && rooms[newx][newy] > rooms[x][y] + 1){q.push(make_pair(newx, newy));rooms[newx][newy] = rooms[x][y] + 1;}}}}bool isarea(vector<vector<int>>&rooms, int x, int y){return (x >= 0 && x < rooms.size() && y >= 0 && y < rooms[0].size());}
};
【LeetCode286】墙与门(BFS)相关推荐
- Leetcode286墙与门
286墙与门 #286墙与门 class Solution:def wallsAndGates(self, rooms):EMPTYROOM = 2**31 - 1door = 0neighbors ...
- LeetCode 286. 墙与门(BFS)
文章目录 1. 题目 2. 解题 2.1 BFS 超时解 2.2 从门开始逆向BFS 1. 题目 你被给定一个 m × n 的二维网格,网格中有以下三种可能的初始化值: -1 表示墙或是障碍物 0 表 ...
- LeetCode 286. 墙与门 多源BFS和DFS
思路1: DFS,对于每个门进行一次DFS搜索,记录每个位置对每个门的距离,当有更小距离的门时更新这个数值 public void WallsAndGates(int[][] rooms) {for ...
- Leetcode 286.墙与门
Time: 20190902 Type: Medium 解法:BFS 题目描述 你被给定一个 m × n 的二维网格,网格中有以下三种可能的初始化值: -1 表示墙或是障碍物 0 表示一扇门 INF ...
- 【leetcode】286. 墙与门
你被给定一个 m × n 的二维网格,网格中有以下三种可能的初始化值: -1 表示墙或是障碍物 0 表示一扇门 INF 无限表示一个空的房间.然后,我们用 231 - 1 = 2147483647 代 ...
- 【LeetCode - 286】墙与门
文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 2.解题思路 首先把所有的门的坐标入队. 当队列不为空,则进行一下操作: 1.取出一个坐标点 (x, y): 2.遍历 ...
- 【C++】BFS类型题目总结
文章目录 1.墙与门 2.图像渲染 3.01 矩阵 4.岛屿数量 5.钥匙和房间 6.机器人移动范围 1.墙与门 题目连接 题目描述: 注意: m == rooms.length n == rooms ...
- 牛客小白月赛24C 十面埋伏(bfs+模拟)
题目链接 思路:说实话一开始没怎么读懂题意,但乱搞也就过了...先把士兵当成墙,bfs求一下可以遍历到的点,接着再看看这些点的上下左右是否有士兵,有的话就变成*. #include<bits/s ...
- leetcode总结
目录 1610. 可见点的最大数目 链表 合并链表 148. 排序链表 21. 合并两个有序链表 23. 合并K个升序链表 反转链表 92. 反转链表 II 206. 反转链表 143 ...
最新文章
- Ubuntu 10.04 LTS 网站权限不够
- 访问MS Access 系统表 MSysObjects ,在SQL SERVER 2005中访问
- TensorRT(6)-INT8 inference
- css 剪辑图片_CSS中的clip-path裁剪图片用法
- 【专题】多角度深入解析开放原子开源基金会
- 基础组件完善的今天,如何通过业务组件提效?
- 第15章 使用DOM的脚本语言
- Tomcat6.0配置集合
- 计算机文件系统小结,文件系统总结
- 一本通1586【 例 2】数字游戏
- java mongodb geo,通过GeoServer在MongoDB中提供地理空间数据
- 【MATLAB深度学习工具箱】学习笔记--Deep Network Designer学习--组成和使用方法
- java从入门到精通 人民邮电_Java从入门到精通【人民邮电出版社】课后习题答案全集...
- Android系统QFIL刷机流程
- 高等数学辅导讲义_《高等数学》考研自用框架体系
- 东南大学本 硕 博论文中期答辩 毕业答辩ppt模板2021版
- BUUCTF-Misc-sqltest(happyctf)
- 主流视频编码器特点、优缺点归纳和比较(H.264、HEVC、VP9、AV1)
- 【服务器数据恢复】服务器断电导致RAID报错的数据恢复案例
- 安装版—安装MySQL
热门文章
- 历年高考专业录取分数线 API 接口
- 自定义Button实现百分比宽度
- Ubuntu ip报错解决方案 ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
- 【前端优化】Externals 实现运行时加载依赖
- 大数据模式让假货无处遁形
- java的amazons3增删改,Java AmazonS3.deleteObject方法代码示例
- 中石油oj 奥运会跳水比赛 C++ sort函数对结构体的排序
- 微信jssdk图片上传 ios不支持
- 老年大学计算机培训教材,老年大学摄影教材.pdf
- PGA112程控增益放大器