LeetCode 286. 墙与门 多源BFS和DFS

 思路1: DFS,对于每个门进行一次DFS搜索,记录每个位置对每个门的距离,当有更小距离的门时更新这个数值

    public void WallsAndGates(int[][] rooms) {for (int i = 0; i < rooms.GetLength(0); i++){for (int j = 0; j < rooms[i].GetLength(0); j++){if (rooms[i][j] == 0){DFS(rooms, i, j, 0);}}}        }void DFS(int[][] rooms, int x, int y, int val){if (x < 0 || x >= rooms.GetLength(0))return;if (y < 0 || y >= rooms[x].GetLength(0))return;if (rooms[x][y] < val)return;rooms[x][y] = val;DFS(rooms, x + 1, y, val + 1);DFS(rooms, x, y + 1, val + 1);DFS(rooms, x - 1, y, val + 1);DFS(rooms, x, y - 1, val + 1);}

 思路2: 多源BFS,先把每个门都压入队列中,然后进行BFS搜索,BFS搜索保证了每个位置只需要遍历到一次,第一次搜索到时一定是最短距离,因此这种算法对于大量数据时肯定会更优秀

private List<int[]> directions = new List<int[]>(){new int[]{1, 0}, new int[]{-1, 0},new int[]{0, 1},new int[]{0, -1}};
private const int INF = 2147483647;
public void WallsAndGates(int[][] rooms){Queue<int[]> queue = new Queue<int[]>();int maxRow = rooms.GetLength(0);if(maxRow == 0)return;int maxCow = rooms[0].Length;for (int i = 0; i < maxRow; i++){for (int j = 0; j < maxCow; j++){if (rooms[i][j] == 0){queue.Enqueue(new int[]{i,j});}}}while(queue.Count > 0){int[] tile = queue.Dequeue();for(int i = 0; i < directions.Count; i++){int x = tile[0] + directions[i][0];int y = tile[1] + directions[i][1];if(x < 0 || x > maxRow - 1 ||  y < 0 || y > maxCow - 1 || rooms[x][y] != INF){continue;}rooms[x][y] = rooms[tile[0]][tile[1]] + 1;queue.Enqueue(new int[]{x, y});}}     }
}

判题的结果是两者时间差不多太多,都在340ms左右,但是明显在数据量大的情况下应该是多源BFS算法更优秀很多。多源BFS最快是328ms,第一次的704ms是因为用了List没有Queue

1586571619(1).png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝塞尔曲线

文章参考于&#xff1a;https://www.jianshu.com/p/0c9b4b681724 https://gameinstitute.qq.com/community/detail/129188 贝赛尔曲线的前世今生&#xff1a; 贝塞尔曲线&#xff0c;这个命名规则一眼看上去大概是一个叫贝塞尔的数学家发明的。但&#xff0c;贝塞尔曲线依据…

如何控制局域网网速_单臂路由|N1盒子(OpenWRT)单线多拨实现网速叠加

受于某些现实条件&#xff0c;有些同学苦于家里的网络带宽太小无法尽情冲浪。如何在不额外花钱升级宽带的情况下提升家里网络呢&#xff1f;且看一个盒子加路由器即可实现网络单线多拨&#xff0c;成倍提升网速完成网速叠加。题图是我家里的路由器加N1盒子。前置条件光猫有超级…

linux离线安装redmine_Linux 下一款非常好用的翻译软件

前面有一个半月的时间&#xff0c;我非常详细且非常基础的介绍了 Ubuntu 18.04 desktop 桌面系统的安装和基本使用&#xff0c;在知乎上也开了一个专栏《Linux 漫游之旅》&#xff0c;上面记录了所有的文章&#xff0c;这个专栏的目的呢是手把手教新接触 Linux 操作系统的朋友如…

vivo应用商店电脑版_VIVO应用商店代理商江湖的那些关系

VIVO应用商店代理商江湖的那些关系需要源文件清晰版本加微信wps007其他干货文章如何不花钱或者少花钱把ASO的活给干了&#xff1f;2020最新主流安卓应用市场ASO技巧以及注意事项App推广的高阶玩法&#xff0c;一箭双星&#xff01;今日头条定向优化技巧今日头条广告创意优化指南…

华为阅读下载的文件在哪里找_华为手机还要天天清理内存?1键关闭这2个设置,手机用到2035年...

阅读本文前&#xff0c;请您先点击上面的蓝色字体“科技荟 ”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。 华为手机还要天天清理内存&#xff1f;1键关闭这2个设置&#xff0c;手机用到…

pyautogui 打包 运行 窗口_试试动态窗口管理器 dwm 吧

以不到 2000 标准行的代码写就的 dwm&#xff0c;是一个速度极快而功能强大&#xff0c;且可高度定制的窗口管理器。-- Adam Šamalk(作者)如果你崇尚效率和极简主义&#xff0c;并且正在为你的 Linux 桌面寻找新的窗口管理器&#xff0c;那么你应该尝试一下 动态窗口管理器(dy…

ArcMap 导入 wrl_flmic拍摄的素材如何无损导入电脑

点击上方“九尾短视频研习室” 可以订阅哦&#xff01;今天分享使用 iPhone 或者安卓版 filmic 拍摄的素材&#xff0c;如何无损导入到win 或 Mac 电脑中~01iPhone Mac使用 iPhone 和 Mac 的朋友&#xff0c;可以使用“隔空投送”无线传输&#xff0c;但是这个过程中&#xff…

LeetCode 97: 交错字符串

这里我们考虑用 s1和 s2的某个前缀是否能形成 s3 的一个前缀。 这个方法的前提建立于&#xff1a;判断一个 s3的前缀&#xff08;用下标 k表示&#xff09;&#xff0c;能否用 s1和 s2 的前缀&#xff08;下标分别为 i和 j&#xff09;&#xff0c;仅仅依赖于 s1 前 i个字符和…

苹果6发布时间_苹果秋季发布会将在北京时间9月16日举办

点击上方蓝字&#xff0c;关注我们苹果正式公布了苹果秋季发布会9月16日举办&#xff0c;届时国内可在五大平台上观看直播&#xff0c;据悉本次发布会将发布的产品有iPhone、ipad和Apple Watch等系列新品&#xff0c;那么这场发布会可以在哪看呢?下面小编带来了2020年苹果秋季…

安装ccs5.5总出现错误_《西游记》“斗法降三怪”,出现错误而补拍,观众总觉得改过结尾...

文|平小山86版《西游记》播出多年&#xff0c;每一年寒暑假都会在电视台重播&#xff0c;看了无数遍还是让观众乐在其中。后来无论是TVB版、浙版、还是张纪中版翻拍的《西游记》&#xff0c;都始终无法撼动它的经典地位。在86版《西游记》中有一集&#xff0c;就是在车迟国的“…

LeetCode面试题03. 数组中重复的数字

方法一&#xff1a;遍历数组 由于只需要找出数组中任意一个重复的数字&#xff0c;因此遍历数组&#xff0c;遇到重复的数字即返回。为了判断一个数字是否重复遇到&#xff0c;使用集合存储已经遇到的数字&#xff0c;如果遇到的一个数字已经在集合中&#xff0c;则当前的数字是…

涨跌因子计算器下载哪里下载_微信爱情指数计算器整蛊app下载_爱情指数计算器整蛊测试下载...

微信爱情指数计算器整蛊app是一款不错的爱情必备的计算器服务&#xff0c;让情侣们有一个很有意思的整蛊服务的App&#xff0c;喜欢的话快来下载吧。微信爱情指数计算器整蛊app介绍1、爱情指数计算器整蛊app是很有意思的一款爱情指数计算器软件2、操作起来也比较的简单&#xf…

如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?

第一章&#xff1a;小明和他的手机 从前有个人叫小明 小明有三大爱好&#xff0c;抽烟&#xff0c;喝酒…… 咳咳&#xff0c;不好意思&#xff0c;走错片场了。应该是逛知乎、玩王者农药和抢微信红包 小明的三大爱好 我们用一段简单的伪代码&#xff0c;来制造一个这样的小…

closewait一直不释放_夏至太阳庆典 || 巨蟹座日蚀新月大释放蜡烛魔法仪式(寻找新的幸运儿)...

太阳庆典. 2020夏至 太阳庆典蜡烛魔法仪式夏至(MIDSUMMER)是四个至点之一&#xff0c;站在春分与秋分之间&#xff0c;并且成为光明力量的象征&#xff0c;因为在这一天白昼的时间是最长的&#xff0c;也代表阳性力量会在这一天达到顶端。许多古老文化会利用火元素来象征这一…

Postman status: 415_415亩!白云首宗农村土地规模化流转成功签约

6月3日钟落潭镇竹二村土地经营权流转签约仪式在白云产权中心顺利举行这是白云区首宗由政府主导的规模化土地流转↓↓↓<< 点击上方&#xff0c;观看完整视频 >>签约现场当天下午&#xff0c;竹二村经济联合社、广州市云供农业科技有限公司和广东三青农业科技有限公…

昆仑通态复制的程序可以用吗_一个PLC连接两个触摸屏例子,昆仑通态和普洛菲斯举例...

以昆仑通态触摸屏和普洛菲斯触摸屏说事啊。昆仑通态TCP7062普洛菲斯GP4402W在自动化设备中&#xff0c;如果设备跨度比较大的话&#xff0c;只有一个屏幕会让使用者不易看数据&#xff0c;要跑来跑去或者操作看不到动作点诸多问题&#xff0c;我做的项目中就有一个电柜只有一个…

Unity 中渲染顺序的理解以及一些坑点 以及2.5D游戏中的渲染排序解决方案

1.ZTest & ZWrite ZTest&#xff1a;深度测试&#xff0c;开启后测试结果决定片元是否被舍弃&#xff0c;可配置 ZWrite&#xff1a;深度写入&#xff0c;开启后决定片元的深度值是否写入深度缓冲&#xff0c;可配置 ZTest可设置的测试规则&#xff1a; ZTest Less&…

LeetCode 235. 二叉搜索树的最近公共祖先

题解 官方的题解就很清晰 https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/solution/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian--2/ 方法一&#xff1a;递归 public class Solution {public TreeNode LowestCommonAncestor(TreeN…

判断鼠标是否在元素上_能不能从大便上判断出一个人是否患有结肠癌?

通过大便的观察是可以怀疑是否得了结肠癌的&#xff0c;但并不是由于从大便上诊断患者得了癌症这个病。结肠癌症诊断金标准结肠癌的诊断的金标准做肠镜&#xff0c;通过肠镜进行观察&#xff0c;看是否有癌症。如果不明显&#xff0c;通过肉眼无法判断&#xff0c;一般要通过病…

LeetCode 240. 搜索二维矩阵

因为矩阵的行和列是排序的&#xff08;分别从左到右和从上到下&#xff09;&#xff0c;所以在查看任何特定值时&#xff0c;我们可以修剪O(m)O(m)或O(n)O(n)元素。 算法&#xff1a; 首先&#xff0c;我们初始化一个指向矩阵左下角的 (row&#xff0c;col)(row&#xff0c;co…