湛蓝之海 发表于 2021-12-30 16:43:31

C++广度优先算法应用题——计算岛屿面积




测试数据如下:


6 6 3 4
0 1 0 1 1 0
0 0 0 1 1 1
1 0 1 1 0 1
0 0 0 1 0 0
0 1 1 1 1 0
0 0 0 0 0 0


//Author:PanDaoxi
#include <iostream>
using namespace std;
//定义结构体
struct node{
int x,y;
}que;
int head=1,tail=1;
//头指针、尾指针分别对应当前搜索对象的下标和下个元素的位置
int m,n,x,y,map; //m,n地图行、列 x,y小童位置的坐标
int sum=0; //计数器:岛屿的面积
//搜索方向
int next={{-1,0},{0,1},{1,0},{0,-1}};
void bfs(){
//第一个搜索的点
que.x=x;
que.y=y;
map=0;
tail++;
//更新岛屿面积
sum++;
//广搜核心代码
while(head<tail){
    for(int i=0;i<=3;i++){
      int tx=que.x+next,
      ty=que.y+next;
      //判断是否可以通过
      if(tx<1||tx>m||ty<1||ty>n) continue;
      //判断是否为陆地
      if(map==1){
      que.x=tx;
      que.y=ty;
      tail++;
      map=0;
      sum++;
      }
    }
    //搜索完以后
    head++;
}
}
int main(){
//输入地图行列、小童的坐标
cin>>m>>n>>x>>y;
for(int i=1;i<=m;i++){
    for(int j=1;j<=n;j++){
      cin>>map;
    }
}
//广度优先搜索
bfs();
//输出信息
cout<<sum<<endl;
return 0;
}







https://blog.51cto.com/u_15467636/4863147
页: [1]
查看完整版本: C++广度优先算法应用题——计算岛屿面积