//宝岛探险 广搜
#include<cstdio>
struct note
{
int x;
int y;
};
struct note que[2501];
int head,tail;
int a[51][51],book[51][51];
int main()
{
freopen("data.in","r",stdin);
int i,j,k,max=0,n,m,startx,starty,tx,ty;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
scanf("%d%d%d%d",&n,&m,&startx,&starty);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
head=1;
tail=1;
que[tail].x=startx;
que[tail].y=starty;
book[startx][starty]=1;
tail++;
max++;
while(head<tail)
{
for(k=0;k<4;k++)
{
tx=que[head].x+dir[k][0];
ty=que[head].y+dir[k][1];
if(tx<1||tx>n||ty<1||ty>m)
continue;
if(a[tx][ty]>0&&book[tx][ty]==0)
{
max++;
book[tx][ty]=1;
que[tail].x=tx;
que[tail].y=ty;
tail++;
}
}
head++;
}
printf("%d\n",max);
return 0;
}
//宝岛探险 深搜
#include<cstdio>
int a[51][51],book[51][51],n,m,sum;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y)
{
int k,tx,ty;
for(k=0;k<4;k++)
{
tx=x+dir[k][0];
ty=y+dir[k][1];
if(tx<0||tx>n-1||ty<0||ty>m-1)
continue;
if(a[tx][ty]>0&&book[tx][ty]==0)
{
sum++;
book[tx][ty]=1;
dfs(tx,ty);
}
}
return;
}
int main()
{
freopen("data.in","r",stdin);
int i,j,startx,starty;
scanf("%d%d%d%d",&n,&m,&startx,&starty);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
book[startx-1][starty-1]=1;
sum=1;
dfs(startx-1,starty-1);
printf("%d\n",sum);
return 0;
}
//宝岛探险,求小岛数量
#include<cstdio>
int a[51][51],book[51][51],n,m,num=0;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y,int color)
{
int k,tx,ty;
a[x][y]=color;
for(k=0;k<4;k++)
{
tx=x+dir[k][0];
ty=y+dir[k][1];
if(tx<0||tx>n-1||ty<0||ty>m-1)
continue;
if(a[tx][ty]>0&&book[tx][ty]==0)
{
book[tx][ty]=1;
dfs(tx,ty,color);
}
}
return;
}
int main()
{
freopen("data.in","r",stdin);
int i,j,startx,starty;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]>0&&book[i][j]==0)
{
num--;
book[i][j]=1;
dfs(i,j,num);
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("有%d座小岛!\n",-num);
return 0;
}
4--宝岛探险(深搜与广搜)
最新推荐文章于 2022-03-14 23:55:53 发布