每日算法刷题-DFS题目

这篇博客介绍了一种利用深度优先搜索(DFS)算法解决LeetCode上的岛屿面积问题。作者通过创建一个`Solution`类,并定义一个内部`DFS`方法来遍历二维网格中的1(表示陆地),当遇到1时,将其置为0以避免重复访问,并递归地访问相邻节点。在遍历整个网格的过程中,记录最大岛屿面积。博客强调了坚持学习的重要性,并鼓励读者一起刷题进步。
摘要由CSDN通过智能技术生成

题目

 

输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
来源:力扣(LeetCode)
链接:岛屿面积题目链接

 解题

采用深度优先遍历DFS:以深度为关键方向,遍历每一个节点,当此节点,连接的节点都访问过,即无房前进时,回退到上一节点,继续访问,遍历全部的节点

所以外层有for()遍历所有节点,然后DFS进行深度遍历

  • 首先分析:从开头进行遍历,对每一个点进行上下左右遍历,如果是1则岛屿数目(这里设一个变量来进行记录)就会加一.
  • 为了防止重复,将访问过的进行赋值0,避免重复访问.
  • 这样我们就可以扩展一个土地块的同时,避免再次访问.

此题代码为

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        def DFS(i,j,grid):


            #判断临界条件,达到什么条件时候返回
            if(i==len(grid) or j<0 or j ==len(grid[0]) or i <0):
                return 0
            if(grid[i][j]==1):
                grid[i][j]=0
                return 1+DFS(i-1,j,grid)+DFS(i,j-1,grid)+DFS(i+1,j,grid)+DFS(i,j+1,grid)
            else:
                return 0
        temp=0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                temp= max(DFS(i,j,grid),temp)
        return temp 

有点晚了,睡觉

最重要的就是要坚持!!!

觉得还不错的话,点关注可以一起刷题一起进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值