第一个独立的小岛数

来源:互联网 发布:菜鸟网络盈利模式 编辑:程序博客网 时间:2024/04/29 23:26
#include<stdio.h>int a[51][51],n,m,sum,book[51][51];void dfs(int x,int y,int color){    int tx,ty,k;    int next[4][2]= {{0,1},                      //向右走        {1,0},                       //向下走        {0,-1},                      //向左走        {-1,0}    };                               //向上走    a[x][y]=color;       //对a[x][y]这个格子进行染色    for(k=0; k<4; 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,color);                        //开始尝试下一个点        }    }    return;}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]);    //对每一个大于0的点进行dfs染色    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]);              //%3中的3是C语言中的场宽        }    printf("\n");    //输出小岛的个数    printf("有%d个小岛\n",-num);    return 0;}

0 0
原创粉丝点击