宝島探検深度優先—C
3932 ワード
地図の中に何個の独立した島があるかを探し出して、実は1つの図の中の独立したサブ図の個数(満水充填法)を求めます
#include
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int n,m;
int a[50][50],book[50][50];
int main()
{
int i,j,num=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
//
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(a[i][j]>0)
{
num--;
book[i][j]=1;
dfs(i,j,num);
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%3d",a[i][j]);
printf("
");
}
printf(" %d",-num);
}
void dfs(int x,int y,int color)
{
int k,tx,ty;
a[x][y]=color;
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)
{
book[tx][ty]=1;
dfs(tx,ty,color);
}
}
return;
}