_695岛屿的最大面积_dfs

本文介绍了如何通过深度优先搜索(DFS)算法解决LeetCode题目695——岛屿的最大面积问题。作者详细解释了解题思路,包括遍历网格、计算岛屿面积和避免重复计算的方法,并提供了Java代码示例。
摘要由CSDN通过智能技术生成

原题链接:

_695岛屿的最大面积_dfs

https://leetcode.cn/problems/max-area-of-island/submissions/518973865/

完成情况:

在这里插入图片描述

解题思路:

这段代码是使用深度优先搜索(DFS)来计算一个二维网格中岛屿的最大面积。算法通过遍历网格中的每个点,当遇到一个岛屿时,调用DFS函数计算该岛屿的面积并将其“淹没”(将岛屿所占的位置置为0),同时维护最大的岛屿面积作为结果。

  • maxAreaOfIsland函数:遍历整个二维网格,对于每个为1的点(即岛屿),调用dfs函数计算岛屿面积,并更新最大面积结果res
  • dfs函数:递归计算当前土地所在的岛屿面积,首先判断边界条件和当前土地是否为0,然后将当前土地置为0以避免重复计算。接着递归计算当前土地上下左右相邻土地的总面积,并返回当前土地所在岛屿的总面积。

整体思路是通过DFS遍历每个岛屿的所有相邻土地,并将其置为0,避免重复计算。最终返回的res即为最大的岛屿面积。

这段代码通过DFS算法实现了计算二维网格中岛屿的最大面积,是一种高效且清晰的解决方案。

参考代码:

package 代码随想录.图论;

public class _695岛屿的最大面积_dfs {
    /**
     * 寻找最大的岛屿面积
     * @param grid
     * @return
     */
    public int maxAreaOfIsland(int[][] grid) {
        int res = 0;
        for (int i = 0; i < grid.length; i++){
            for (int j = 0; j < grid[0].length; j++){
                //每一个去dfs,从中计数,找出满足条件的最大的岛屿
                if (grid[i][j] == 1){
                    //每次计算一个岛屿的面积都要与res进行比较,维护最大的岛屿面积作为最后的答案
                    res = Math.max(res,dfs_maxAreaOfIsland(grid,i,j));
                }
            }
        }
        return res;
    }

    /**
     *
     * @param grid
     * @param i
     * @param j
     * @return
     */
    private int dfs_maxAreaOfIsland(int[][] grid, int i, int j) {
        //一样的,先判断是否可以,然后每一次的一个进来的新的,都去重新计数,找出最大值,然后每次出来的结果,去和当前的最大值作比较
        if (i<0  ||  j<0 || i> grid.length-1 || j > grid[0].length-1){
            return 0;
        }
        //当前可以被认为是一块新的岛屿
        grid[i][j] = 0;
        //然后向四个方向机进行扩展,同时记录当前的位置
        return dfs_maxAreaOfIsland(grid,i+1,j) + dfs_maxAreaOfIsland(grid,i-1,j) +dfs_maxAreaOfIsland(grid,i,j+1) +dfs_maxAreaOfIsland(grid,i,j-1) + 1;
    }
}

错误经验吸取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值