宝島探検深度優先—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; }