优选算法_岛屿的最大面积_floodfill算法_C++

一.题目解析

一个群岛在一片海上,找出面积最大的岛屿,如图,红色区域最大

算法解析:floodfill算法+bfs

遍历整个数组,每次遍历到一个新岛屿边缘,用bfs遍历看岛屿的面积有多大,并且将未遍历的位置visxy=true;

考验代码能力,结合代码进行理解

二.代码编写

cpp 复制代码
class Solution {
    int dx[4]={0,0,1,-1};//方向偏移数组
    int dy[4]={1,-1,0,0};
    bool vis[50][50];//判断是否遍历的数组
    int m,n;
public:
    int maxAreaOfIsland(vector<vector<int>>& grid) {
        m=grid.size(),n=grid[0].size();
        memset(vis, 0, sizeof(vis)); // 初始化 vis
        int ret=0;
        for(int i=0;i<m;i++)//遍历整个数组    
        {
            for(int j=0;j<n;j++)
            {
                if(grid[i][j]==1&&vis[i][j]==false)ret=max(bfs(grid,i,j),ret);
                //满足固定性质并且是没有遍历过的位置
            }
        }
        return ret;
    }

    int bfs(vector<vector<int>>& grid,int i,int j)//bfs看数组的大小
    {
        queue<pair<int,int>>q;//队列实现bfs
        q.push({i,j});
        vis[i][j]=true;//将已经遍历的位置标记
        int curret=1;
        while(!q.empty())
        {   
            auto [a,b]=q.front();
            q.pop();
            for(int k=0;k<4;k++)//四个方向遍历
            {
                int x=a+dx[k],y=b+dy[k];
                if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&&vis[x][y]==false)curret++,q.push({x,y}),vis[x][y]=true;
                //不越界,满足某一性质,没有遍历的位置
            }
        }
        return curret;//返回当前岛屿大小
    }
};
相关推荐
斯维赤20 分钟前
限流、熔断、降级,你真的分得清吗?
java·后端·架构
Evand J1 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
choumou_M2 小时前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
Coder_Shenshen2 小时前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
BaiPeter3 小时前
ZPL文件预览
开发语言·c++
aiks_yuan3 小时前
Java CPU 100% 怎么排查:JDK 11 起 jstack 自带线程 CPU 时间,不用再 top -H 换算十六进制(JDK 8、11、17 实测)
java
心仪久了会沦陷4 小时前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
小此方4 小时前
[算法实战论:动态规划]背包问题概念,01不满背包问题,01满背包问题,背包问题的滚动数组空间优化
算法·动态规划
Flynn Liang4 小时前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang5 小时前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j