岛屿数量 广搜 +二维数组

这段代码的主要目的是计算一个二维矩阵中连通区域的数量。具体来说,它使用广度优先搜索(BFS)算法来遍历矩阵中的每个元素,如果该元素为1且尚未被访问过,则将其标记为已访问,并递归地访问其上下左右相邻的元素。最后,统计所有连通区域的数量。

话不多说 上代码!

#include<bits/stdc++.h>

using namespace std;

#define max 101

void bfs(int i,int j,int a[max][max],int b[max][max],int n,int m)//i,j代表下标  b数组记录该点是否被记录   a数组代表岛屿数组   n行数  m列数

{

  if(i>=n||j>=m||a[i][j]==0||i<0||j<0)// 搜索终止条件  到达边界时或者该点为水时 

  {

    return ;

  }

  if(a[i][j]==1&&b[i][j]==0)//若该点未被b数组记录  且此处为岛屿

  {

    b[i][j]=1;

    bfs(i+1,j,a,b,n,m);//上下左右搜索

    bfs(i,j+1,a,b,n,m);

    bfs(i,j-1,a,b,n,m);

    bfs(i-1,j,a,b,n,m);

  }

}

int main()

{

  int a[max][max],b[max][max];

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

  {

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

    {

      b[i][j]=0;//初始化标记数组

    }

  }

  int n,m;

  cin>>n>>m;

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

  {

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

    {

      cin>>a[i][j];//输入数据

    }

  }

  int count = 0;

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

  {

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

    {

      if(a[i][j]==1&&b[i][j]==0)

      {

         bfs(i,j,a,b,n,m);//遍历数组  搜索  

          count++;//岛屿数量   

      }

    }

  }

  cout<<count;

  return 0;

}

给你一个由 1(陆地)和 0(水)组成的n*m的二维网格,请你计算网格中岛屿的数量num。

岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。例如

000
010
001

此为两个岛屿

此外,你可以假设该网格的四条边均被水包围。1<=n,m<=100

输入格式:

第一行中给出网格长宽n,m
接下来的n行表示网格情况

输出格式:

岛屿个数num

输入样例:

在这里给出一组输入。例如:

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1

输出样例:

在这里给出相应的输出。例如:

3
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮助您写一个深度优先遍历算法来解决这个问题。 首先,让我们定义一个函数来计算一个给定的二维数组中最大的岛屿面积: ```python def max_island_area(grid): max_area = 0 for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j] == 1: area = dfs(grid, i, j) max_area = max(max_area, area) return max_area ``` 在这个函数中,我们迭代整个二维数组,找到每个陆地块(即 grid[i][j] == 1),然后对于每个陆地块,我们运行深度优先遍历算法来计算与之相连的陆地块的数量。 接下来,我们来定义深度优先遍历算法 dfs: ```python def dfs(grid, i, j): if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] == 0: return 0 grid[i][j] = 0 area = 1 area += dfs(grid, i+1, j) area += dfs(grid, i-1, j) area += dfs(grid, i, j+1) area += dfs(grid, i, j-1) return area ``` 在这个算法中,我们首先检查当前坐标是否越界或已经被访问过(即 grid[i][j] == 0),如果是这样,就返回 0。否则,我们将当前坐标的值置为 0,表示已经被访问过。然后,我们递归地遍历当前坐标的上下左右四个方向,并将每个方向的面积相加,最后返回总面积。 最后,我们可以使用下面的代码来测试我们的算法: ```python grid = [[1, 1, 0, 0, 0], [1, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 1]] print(max_island_area(grid)) # 输出:4 ``` 在这个例子中,我们的二维数组表示了一个 4x5 的海域,其中最大的岛屿面积为 4。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值