这段代码的主要目的是计算一个二维矩阵中连通区域的数量。具体来说,它使用广度优先搜索(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。
岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。例如
例 | 例 | 例 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
此为两个岛屿
此外,你可以假设该网格的四条边均被水包围。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