【C/C++算法】岛屿的最大面积-DFS的应用

本文介绍了一个使用C++编写的算法,通过深度优先搜索遍历二维网格中的陆地区域,计算并返回每个岛屿的最大面积。代码实现包括dfs函数和主函数,对岛屿进行标记并统计面积。
摘要由CSDN通过智能技术生成

力扣原题
思路:从(0,0)位置出发,开始扫描直到出现第一个陆地区域块(即grid数组该位置为1),然后从该点开始进行dfs搜索,每搜索到一个陆地块就标为true并且计数器+1,直到周围所有块都是水域,返回。
在这里插入图片描述

#include<bits/stdc++.h>
#define endl '\n' 
#define int long long
using namespace std;

int d[4][2]={0, 1, 1, 0, -1, 0, 0, -1};
int cnt;//存储每个岛屿的面积
void dfs(vector<vector<int>>& grid,vector<vector<bool>>& tag,int x,int y)
{
	if(tag[x][y]||grid[x][y]==0)return;//遍历过或者是水域就返回
	tag[x][y]=true;//标记为访问过
	cnt++;//岛屿面积+1
	for(int k=0;k<4;k++)//遍历当前陆地块上下左右四个方向
	{
		int nextx=x+d[k][0];
		int nexty=y+d[k][1];
		//越界直接跳过
		if(nextx<0||nexty<0||nextx>=grid.size()||nexty>=grid[0].size())continue;
		dfs(grid,tag,nextx,nexty);
	}
}


signed main() {
    ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	
	vector<vector<int>> grid={{0,0,0,0,0}};
	int m=grid.size(),n=grid[0].size();
	vector<vector<bool>> tag(m,vector<bool>(n,false));//定义标记数组
	vector<int> area;//存储所有岛屿的面积
	area.push_back(0);//处理没有岛屿的情况
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(!tag[i][j]&&grid[i][j]==1)
			{
				cnt=0;//访问岛屿的第一小块,初始化面积为0
				dfs(grid,tag,i,j);
				area.push_back(cnt);//搜索完整块岛屿,保存岛屿面积
			}
		}
	}
	sort(area.begin(),area.end());//排序,取最大值
	cout <<area[area.size()-1];
    return 0;
}
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值