首页 > 其他分享 >岛屿的最大面积(深搜

岛屿的最大面积(深搜

时间:2024-11-02 17:52:04浏览次数:3  
标签:return 最大 int 面积 岛屿 Dfs grid result

卡码网 

100. 岛屿的最大面积

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出描述

输出一个整数,表示岛屿的最大面积。如果不存在岛屿,则输出 0。

输入示例
4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1
输出示例
4
提示信息

样例输入中,岛屿的最大面积为 4。

数据范围:

1 <= M, N <= 50。

思路:大体思路和岛屿的最大数量一致 都是先入录文本 再进行计算 区别是

  //让每次深搜到一个1值后都加1 就代表增加一个1的面积 四个方向加到一起就是一个岛的总面积

        return 1+Dfs(grid,r,c+1) +Dfs(grid,r,c-1)+Dfs(grid,r+1,c)+Dfs(grid,r-1,c);

在return时需要加1 代表每次搜到后增加1面积 

并且在int a=Dfs(grid,i,j);

 result=Math.Max(result,a); //取每次遍历到的最大的面积数 

Dfs的返回值需要变为int 类型的 并且拿一个a去承载 在每次外层循环中取最大的a值 

using System;

class Program
{
    static void Main()
    {
        //读取输入
        string[] firstLine=Console.ReadLine().Split();//读取一行输入并将其分割成一个字符串数组
        int n=int.Parse(firstLine[0]);
        int m=int.Parse(firstLine[1]);
        //最大面积
        int result=0;
        //填充岛屿
        int[,] grid=new int[n,m];
        
        for(int i=0;i<N;i++)
        {
            firstLine=Console.ReadLine().Split();
            for(int j=0;j<m;j++)     //填充每一行
            {
                grid[i,j]=int.Parse(firstLine[j]);
            }
        }
        
        //计算岛屿面积
        int SumLand =CountIsland(grid,n,m);
        Console.WriteLine(SumLand);
    }
    //遍历整个数组 寻找含1的位置
    public static int CountIsland(int[,]grid ,int n,int m)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(grid[i,j]==1)
                {
                    
                   int s= Dfs(grid,i,j,n,m);
                   result=Math.Max(s,result); //每次外层循环都计算最大面积
                }
            }
        }
        return result; //返回岛屿最大面积
    }
    
    public int Dfs(int[,] grid ,int r,int c,int n,int m)
    {
        //如果下标不在范围内 直接返回
        if(r<0 || r>=n ||c<0 ||c>=m)
        {
            return 0;
        }
        if(grid[r,c]!=1)
        {
            return 0;
        }
        //如果在范围内 
        //将当前陆地标记为水 避免重复基数
        grid[r,c]=0; //递归访问四个方向
        return 1+Dfs(grid,r+1,c,n,m)
                +Dfs(grid,r-1,c,n,m)
                +Dfs(grid,r,c+1,n,m)
                +Dfs(grid,r,c-1,n,m);
    }
    
}

标签:return,最大,int,面积,岛屿,Dfs,grid,result
From: https://blog.csdn.net/qq_74014730/article/details/143453944

相关文章

  • 滑动窗口最大值
    滑动窗口最大值题目链接:LeetCode239描述给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例输入:nums=[1,3,-1,-3,5,3,6,7],k=3......
  • RabbitMQ实现轮询形式消息最大发送失败次数,及详细解析
    RabbitMQ设置消息最大发送失败次数,达到三次后不确认消息(此处根据业务需求可考虑使不确认的消息进入死信交换机)配置文件:spring:rabbitmq:host:192.168.1.248port:5672username:adminpassword:123456virtual-host:powernodepublisher......
  • LeetCode100之滑动窗口最大值(239)--Java
    1.问题描述        给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。        示例1输入:nums=[1,3,-1,-3,5,3,6......
  • LeetCode题练习与总结:矩形区域不超过 K 的最大数值和--363
    一、题目描述给你一个 mxn 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。示例1:输入:matrix=[[1,0,1],[0,-2,3]],k=2输出:2解释:蓝色边框圈出来的矩形区域 [[......
  • 超级饮料的最大强化能量
    超级饮料的最大强化能量题目来自未来的体育科学家给你两个整数数组energyDrinkA和energyDrinkB,数组长度都等于n。这两个数组分别代表A、B两种不同能量饮料每小时所能提供的强化能量。你需要每小时饮用一种能量饮料来最大化你的总强化能量。然而,如果从一种能量饮料切换......
  • 最大子矩阵和
    最大子矩阵和题目Leetcode:面试题17.24.最大子矩阵给定一个正整数、负整数和0组成的N×M矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组[r1,c1,r2,c2],其中r1,c1分别代表子矩阵左上角的行号和列号,r2,c2分别代表右下角的行号和列号。若有多个满足条件的......
  • 2024-11-1-leetcode每日一题-3259. 超级饮料的最大强化能量
    题目描述来自未来的体育科学家给你两个整数数组 energyDrinkA 和 energyDrinkB,数组长度都等于 n。这两个数组分别代表A、B两种不同能量饮料每小时所能提供的强化能量。你需要每小时饮用一种能量饮料来 最大化 你的总强化能量。然而,如果从一种能量饮料切换到另一种,你......
  • Leetcode 3259. 超级饮料的最大强化能量
    动态规划。f[i][0/1]表示前i个且最后选A或B的方案的集合。所以f[i][0]=max(f[i-1][0],f[i-2][1])+A[i]。f[i][1]同理。1typedeflonglongLL;2constintN=1e5+10;3LLf[N][2];4classSolution{5public:6LLmaxEnergyBoost(vector<int>&A,vector<i......
  • Leetcode—624. 数组列表中的最大距离【中等】
    2024每日刷题(198)Leetcode—624.数组列表中的最大距离实现代码classSolution{public:intmaxDistance(vector<vector<int>>&arrays){intm=arrays.size();intn=arrays[0].size();intmn=arrays[0][0];intmx=ar......
  • windows 命令行执行.bat ,显示已经达到最大的setlocal递归层,解决办法
    windows命令行执行.bat,显示已经达到最大的setlocal递归层,网上也没有一个确切的解决办法,自己摸索寻找解决如下:C:\Users\yangz\Desktop>pingwww.baidu.com已经达到最大的setlocal递归层。一.解决思路:这条信息表明你在使用Windows命令提示符(CMD)时遇到了一个错误。错误信......