#include<iostream>
using namespace std;
int a[51][51];
int book[51][51],n,m,sum;
void dfs(int x,int y){
//定义一个方向数组
int next[4][2]={{0,1},//向右走
{1,0},//向下走
{0,-1},//向左走
{-1,0}//向上走
};
int k,tx,ty;
//枚举4个方向
for(k=0;k<=3;k++){
//计算下一步的坐标
tx=x+next[k][0];
ty=y+next[k][1];
//判断是否越界
if(tx<1||tx>n||ty<1||ty>m){
continue;//退出此次循环
}
//判断是否是陆地
if(a[tx][ty]>0&&book[tx][ty]==0){
sum++;
book[tx][ty]=1;//标记这个点已经走过
dfs(tx,ty);//开始尝试下一个点
}
}
return;
}
int main(){
int i,j,startx,starty;
cout<<"请输入n和m,n为行,m为列:"<<endl;
cin>>n>>m;
//读入起点坐标
cout<<"请输入起点坐标:"<<endl;
cin>>startx>>starty;
//读入迷宫
cout<<"请输入迷宫矩阵:"<<endl;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>a[i][j];
}
}
book[startx][starty]=1;
sum=1;
//从降落的位置开始尝试
dfs(startx,starty);
//最后输出这岛屿的大小
cout<<endl<<"岛屿大小为:"<<sum<<endl;
getchar();
return 0;
}
4.5.3宝岛探险//DFSearch(又称着色法)
最新推荐文章于 2021-12-01 13:25:55 发布