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[1001];
int head=1,tail=1; 
//头指针、尾指针分别对应当前搜索对象的下标和下个元素的位置
int m,n,x,y,map[101][101]; //m,n地图行、列 x,y小童位置的坐标
int sum=0; //计数器:岛屿的面积 
//搜索方向
int next[4][2]={
    
    {
    
    -1,0},{
    
    0,1},{
    
    1,0},{
    
    0,-1}}; 
void bfs(){
    
    
	//第一个搜索的点 
	que[tail].x=x;
	que[tail].y=y;
	map[x][y]=0;
	tail++;
	//更新岛屿面积
	sum++;
	//广搜核心代码
	while(head<tail){
    
    
		for(int i=0;i<=3;i++){
    
    
			int tx=que[head].x+next[i][0],
			ty=que[head].y+next[i][1];
			//判断是否可以通过
			if(tx<1||tx>m||ty<1||ty>n) continue;
			//判断是否为陆地
			if(map[tx][ty]==1){
    
    
				que[tail].x=tx;
				que[tail].y=ty;	
				tail++;
				map[tx][ty]=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[i][j];
		}
	}
	//广度优先搜索
	bfs();
	//输出信息
	cout<<sum<<endl; 
	return 0;
} 

在这里插入图片描述

Guess you like

Origin blog.csdn.net/PanDaoxi2020/article/details/121591566