以695. 岛屿的最大面积为例:

在图的遍历中,如果不加任何约束,DFS和BFS一定会遍历到重复节点,解决这个问题的一个方法就是在函数外定义一个visited=set(),然后每次遍历的时候把未在visited中的节点加入,在外面的递归终止条件、队列加入条件的时候加入是否在visited内。

class Solution:def maxAreaOfIsland(self, grid: List[List[int]]) -> int:# def dfs(i,j):#     # if (0<=i<row and 0<=j<col) and ((i,j) not in visited) and grid[i][j]==1:#     if (0<=i<row and 0<=j<col) and grid[i][j]==1:#         # visited.add((i,j))#         grid[i][j]=0#         count.append(0)#         dfs(i+1,j)#         dfs(i-1,j)#         dfs(i,j+1)#         dfs(i,j-1)#     else:#         return# if len(grid)==0:#     return 0# if len(grid)==1 and len(grid[0])==1:#     if grid[0][0]==0:#         return 0#     else:#         return 1def bfs(i,j):# visited=set()# queue=[(i,j)]queue=collections.deque()queue.appendleft((i, j))res=0while(len(queue)!=0):i,j=queue.pop()if (0<=i<row and 0<=j<col) and grid[i][j]==1:grid[i][j]=0res=res+1# visited.add((i,j))queue.insert(0,(i+1,j))queue.insert(0,(i-1,j))queue.insert(0,(i,j+1))queue.insert(0,(i,j-1))else:continuereturn res# visited=set()row,col=len(grid),len(grid[0])res=0for i in range(row):for j in range(col):if grid[i][j]==1:# count=[]res=max(res,bfs(i,j))return res

这道题中,我们可以利用dfs和bfs来对岛屿的最大面积进行统计,通过visited可以避免错误计算岛屿面积(因为每次遇见的都是新的位置)。这道题中,由于题目的特殊性,我们可以利用染色算法,每次到一个节点的时候,直接把它置0,由于递归终止条件、队列加入条件的限制,以后的每一次,都不可能再访问重复节点了。也即,给我一块落脚点,我能走遍整个岛屿并把这块岛屿变成海洋。这种染色/沉岛算法会改变给定数据,visited的方式不会。

PS:记录一下。

dfs、bfs时候染色算法和直接传一个visited两种方法相关推荐

  1. 用JSP实现上传文件的两种方法

    在用Java开发企业器系统的使用,特别是涉及到与办公相关的软件开发的时候,文件的上传是客户经常要提到的要求.因此有 一套很好文件上传的解决办法也能方便大家在这一块的开发. 首先申明,该文章是为了自己记 ...

  2. prim算法求最小生成树_最小生成树的两种方法(Kruskal算法和Prim算法)

    关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...

  3. C#:将图片文件上传到数据库两种方法。

    (推荐)方法1: 将图片复制到指定文件夹,在数据库中存储图片路径,通过读取路径来显示图片. string str;private void toolStripButton1_Click(object ...

  4. java new thread参数_java开启新线程并传参的两种方法

    一.继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:run方法里 ...

  5. 手机连接电脑传文件的两种方法详解

    1.物理连接:使用传输数据线,这里不做介绍 2.无线连接: 1-手机和电脑连接同一个wifi 2-打开手机文件夹app 3-点击右上角或者分类里的远程管理 4-设置用户名和密码 5-电脑端打开我的电脑 ...

  6. Silve37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)

    在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString.首先我们新建一个名 为SLConnectASP.NET的Silverlight应 ...

  7. jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法

    从A页面通过url传参到B页面时,解析url参数可以用下面两种方法: 方法一:正则分析法 function getQueryString(name) { var reg = new RegExp(&q ...

  8. Java1.使用二分搜索算法查找任意N个有序数列中的指定元素。 2.通过上机实验进行算法实现。 3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告。 4.至少使用两种方法进行编程,直接查

    1.使用二分搜索算法查找任意N个有序数列中的指定元素. 2.通过上机实验进行算法实现. 3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告. 4.至少使用两种方法进行编程,直接查找/递归 ...

  9. [ASP.NET] 限制上传文件类型的两种方法(转)

    通常,为了防止因用户上传有害文件(如木马.黑客程序)引发的安全性问题,Web程序都会对用户允许上传的文件类型加以限制.而本文将要介绍的就是如何在ASP.NET应用程序中利用Web Control的内置 ...

最新文章

  1. 建立二维数组_二维数组的 DP
  2. 查询oracle数据库adg的模式,Oracle11g ADG配置
  3. java创建对象new后面为啥可以传入参数_来复习一下Java的对象知识
  4. node.js中的字符串、对象和json处理函数
  5. 浅析Block的内部结构 , 及分析其是如何利用 NSInvocation 进行调用
  6. 简单的MVC与SQL Server Express LocalDB
  7. 工具栏的使用 1118
  8. raspberry pi_使用Raspberry Pi配置业余无线电网关
  9. linux查看内存占用情况
  10. java左移负数位_java的左移运算符和右移运算符
  11. java图书管理系统的不足_java图书管理系统的问题
  12. java贪吃蛇代码_java贪吃蛇游戏实现代码
  13. cad字体安装_CAD字体安装方法
  14. deb 中标麒麟_中标麒麟linux
  15. .net中获取MD5码
  16. WIN10系统安装虚拟机以及CentOS7
  17. Jetpack Compose的Modifier顺序问题
  18. 游戏陪练 预约交友 语音聊天 双端APP源代码+编译说明
  19. Sun JAVA 认证介绍
  20. Oracle(三)常用的查询语句

热门文章

  1. 基于Django以及requests爬虫的音乐网站
  2. 不动点理论在计算机科学中的应用,不动点定理
  3. 接触网的异物入侵 和卡尔曼的异物检测系统
  4. Jquery页面滚动条向下拉到div的位置时,此div就固定在顶部,向上拉时返回原位置
  5. Unreal Engine4开篇
  6. 原创|Python wxpy模块的有趣应用,微信机器人,微信好友分析搞定
  7. 查看dll文件的内容
  8. 支付宝电脑网站支付(新版)
  9. 11 个非常实用的 Python 和 Shell 拿来就用脚本实例!
  10. Unity黑暗之光笔记-NGUI-01-游戏载入界面