孤岛的总面积(Dfs C#

卡码网 101题

力扣第

1254. 统计封闭岛屿的数目 也是一样的 差不多是一道题

  1. 孤岛的总面积
题目描述

给定一个由 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
输出示例
复制代码
1
提示信息

在矩阵中心部分的岛屿,因为没有任何一个单元格接触到矩阵边缘,所以该岛屿属于孤岛,总面积为 1。

数据范围:

1 <= M, N <= 50。

看力扣题解是有很多种方法 深搜中有 用bool DFs的 也有用边长的 但是我没太看懂边长的版本

代随的方法是 先清理完四边的陆地再普通深搜搜一遍岛屿数量 然后将每个岛屿的面积相加 感觉比较清晰简单故采用这个方法

思路:先清理完四边的陆地再普通深搜搜一遍岛屿数量 然后将每个岛屿的面积相加

using System;

class Program

{

static void Main()

{

//读取输入

string\[\] firstLine=Console.ReadLine().Split();//读取一行输入并将其分割成一个字符串数组

int n=int.Parse(firstLine0);

int m=int.Parse(firstLine1);

//总面积

int result=0;

//填充岛屿

int, grid=new intn,m;

for(int i=0;i<n;i++)

{

firstLine=Console.ReadLine().Split();

for(int j=0;j<m;j++) //填充每一行

{

gridi,j=int.Parse(firstLinej);

}

}

//计算岛屿总面积

int SumLand =AreaIsland(grid,n,m);

Console.WriteLine(SumLand);

}

//遍历整个数组并且将每一个岛屿的面积相加

public static int AreaIsland(int,grid ,int n,int m)

{

//清理上下左右边界的陆地

for(int i=0;i<m;i++)

{

if(grid0,i==0)//如果第一行找到土地 直接DFS全变为水

{

Dfs(grid,0,i,n,m);

}

if(gridn-1,i==0)

{

Dfs(grid,n-1,i,n,m);

}

}

//左右列

for(int j=0;j<n;j++)

{

if(gridj,0==0)//如果第一列找到土地 直接DFS全变为水

{

Dfs(grid,j,0,n,m);

}

if(gridj,m-1==0)

{

Dfs(grid,j,m-1,n,m);

}

}

for(int i=0;i<n;i++)

{

for(int j=0;j<m;j++)

{

if(gridi,j==1)

{

int s= Dfs(grid,i,j,n,m);

result+=s; //每次循环都累加面积

}

}

}

return result; //返回岛屿总面积

}

public static int Dfs(int, grid ,int r,int c,int n,int m)

{

//如果下标不在范围内 直接返回

if(r<0 || r>=n ||c<0 ||c>=m)

{

return 0;

}

if(gridr,c!=1)

{

return 0;

}

//如果在范围内

//将当前陆地标记为水 避免重复基数

gridr,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);

}

}

相关推荐
wabs6664 小时前
关于图论【卡码网117.软件构建的思考】
数据结构·算法·软件构建·图论·卡码网
mifengxing4 小时前
LeetCode 41.缺失的第一个正数|Hard题O(n)+O(1)最优解法深度解析
java·算法·leetcode·排序算法
Tongzhi20265 小时前
从部署到运维:通芝科技无感考勤一体机的全流程效率解析
运维·数据结构·科技·算法·贪心算法
Wang's Blog5 小时前
AI Agent白手起家30: 动态示例选择器之根据长度选择 Few Shot 示例
算法
oyguyteggytrrwwwrt7 小时前
自制交叉线路识别算法
算法
手写码匠7 小时前
华为云Flexus+DeepSeek征文|Dify 多智能体协同编排实战:R1 规划 + V3 执行,构建企业 Agent 团队
人工智能·深度学习·算法·aigc
晓天衡宇•评测社区8 小时前
FSR-Bench 前沿科学推理榜单发布:GPT-5.5 居首,“会推理”未必“能答对”
算法
程序喵大人9 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
hanlin039 小时前
动态规划专练:力扣第121、122题
笔记·算法·leetcode
To_OC9 小时前
LC 74 搜索二维矩阵:换皮的二分查找,我居然一开始没看出来
javascript·算法·leetcode