这也是一道典型的dfs的题。。。和number of island很像,但是又有一些特点。。。

刚刚了number of island,dfs的设计其实是为了销毁整个岛屿,起的是毁灭作用。。。主程序的话,还是在原来的方法里面实现,通过扫一遍grid,遇到了1就调用dfs

这里呢,我可以很快想到,在主程序里面,扫一遍grid,遇到了0,就调用dfs,进行铺路!!对,这里的dfs就是铺路的作用。。。那么怎么铺呢?就是设计dfs的问题了。。。

思路的关键是设置一个distance作为参数!!所以一用有 grid,x,y,distance这4个参数。。。如果原有的数比现在的distance要小那就停止,否则,设置为现在这个distance,因为这个distance是可以一定保证从0铺路铺到这的。。。基本思路就有了。。。

public class Solution {public void wallsAndGates(int[][] rooms) {for(int i=0; i<rooms.length; i++){for(int j=0; j<rooms[0].length; j++){if(rooms[i][j]==0) dfs(rooms, i, j, 0);  // only start at the gate!!! road can only build from the gate!!}}    }public void dfs(int[][] rooms, int x, int y, int dis){if(x<0 || y<0 || x>=rooms.length || y>=rooms[0].length || rooms[x][y]<dis) return;rooms[x][y]=dis;dfs(rooms, x+1, y, dis+1); // rightdfs(rooms, x-1, y, dis+1); // leftdfs(rooms, x, y+1, dis+1); // updfs(rooms, x, y-1, dis+1); // down}}

今天的代码:

public class Solution {public void wallsAndGates(int[][] rooms) {for(int i=0; i<rooms.length; i++){for(int j=0; j<rooms[0].length; j++){if(rooms[i][j]==0) dfs(rooms, i, j, 0);}}}private void dfs(int[][] rooms, int x, int y, int distance){if(x<0 || y<0 || x>=rooms.length || y>= rooms[0].length || rooms[x][y]<distance) return; // 注意了不能写<=,=的时候要继续的,想想其实的时候是0啊,给出的distance 也是0rooms[x][y]=distance;  // 居然忘记了铺路这一最重要最核心的一步!!!dfs(rooms, x-1, y, distance+1);dfs(rooms, x+1, y, distance+1);dfs(rooms, x, y-1, distance+1);dfs(rooms, x, y+1, distance+1);}}

286 Walls and Gates相关推荐

  1. LeetCode 286 Walls and Gates

    思路 思路1:暴力搜索,对每个空房间(INF)进行bfs,不过此时的bfs应该是每次向队列中加下一层的元素而不是单个元素,否则深度会算错. 时间复杂度O(n2∗m2n^2 * m^2n2∗m2), 空 ...

  2. 【Leetcode】286. Walls and Gates

    题目地址: https://leetcode.com/problems/walls-and-gates/ 给定一个二维矩阵,里面含0,−1,INF0,-1,INF0,−1,INF.000表示门,−1- ...

  3. 继续过中等难度.0309

      .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Mediu ...

  4. Python JAVA Solutions for Leetcode

    Python & JAVA Solutions for Leetcode (inspired by haoel's leetcode) Remember solutions are only ...

  5. Leetcode重点250题

    LeetCode重点250题 这个重点题目是把LeetCode前400题进行精简.精简方法如下: 删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于 ...

  6. [Google] 人和自行车匹配

    2D平面上,有m个人(P),n辆自行车(B),还有空白(O)满足以下条件 1.m < n.  2.不存在两个人,到同一辆自行车距离相等, 距离用abs(x1-x2) + abs(y1-y2)定义 ...

  7. LeetCode All in One 题目讲解汇总(持续更新中...)

    原文地址:https://www.cnblogs.com/grandyang/p/4606334.html 终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开 ...

  8. LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本(二)

    前面一篇由于文字太多,不给编辑,遂此篇出炉 LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本(一) DFS&BFS (262)200. Number of Islan ...

  9. html 纵向选项卡,竖直选项卡式面板的实现_html/css_WEB-ITnose

    前面的话: 我是html的初学者,懂得一些html的基本知识.最近开始学css,不会JavaScript.了解到adobe dw cs5的插入->spry有选项卡式面板的设计,对这个很感兴趣.但 ...

最新文章

  1. PHP关于curl_setopt几个参数设置的说明
  2. 在Vivado中,使用锁定增量编译技术进行增量综合布局布线
  3. 重载VerifyRenderingInServerForm
  4. c# TCP Socket通讯基础
  5. python 实现组合数
  6. 电脑微信扫一扫在哪_13个微信隐藏技巧,至少有10个你不知道
  7. word制作电子签名
  8. 最长上升子序列_动态规划 最长上升子序列LIS
  9. SEO:避免关键词内部竞争带来的无法收录问题,
  10. 销售数据可视化图表excel模板_两份办公学习资源,可视化EXCEL模板和Excel函数课程...
  11. VB6实现网页自动化方法(chrome或360极速版)
  12. linux硬盘坏了无法查看分区,Linux 磁盘坏道检测和修复 查看硬盘坏道代码
  13. java isbn_JAVA ISBN10 ISBN13 正则表达式
  14. 系统分析设计——如何识别类
  15. 双11临近,电脑无缘无故的弹出了双11天猫广告,必须追踪到底
  16. Python地理地图可视化:folium把百度地图中国城市中心经纬度解析出来并在地图上展示(三)
  17. 动手学深度学习(三十九)——门控循环单元GRU
  18. 强强联手 法大大电子合同金蝶云·苍穹版上线
  19. 怎么用色环搭配颜色?色环搭配常用色彩组合有哪些?
  20. 输入地址查询并获取地址的经纬度-百度地图-JS

热门文章

  1. Windows Api 封装 C++ 库
  2. 使用opencv制作人脸识别小软件
  3. 腾讯沙盒游戏计算机,最好玩的五款沙盒游戏 腾讯新作上榜
  4. 星环TranswarpInceptor通过waterdrop添加表,视图,函数和存储过程
  5. 6.18科技新闻(2)
  6. Cryptography,一个C#写的加解密算法的类
  7. “傲慢”的飞书渴望被“白嫖”
  8. Phpstorm好用插件
  9. Tabby使用之:中文乱码问题
  10. 一款超高性价比的57步进电机驱动芯片TB6600HG实测稳定4.2A输出42V输入