细胞

详情:

一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如阵列:   
02345000
67103456
05002045
60067100
00000089
有4个细胞
输入格式:
整数m,n(m行,n列)矩阵。
输出格式:
细胞的个数。

题目理解:就是在一张图中找到子图的个数。这里需要注意的地方是输入。输入之间没有空格,不能直接使用二维数组。可以使用字符串数组来转换。其他地方就是深搜了。

深搜的话,就是在一个点的四周寻找,若是符合要求的,则利用标记数组来标记。

 for(i = 1;i <= n;i++)
         scanf("%s",c);
         for(j = 0;j < m;j++)
             a[i][j] =c[j]-'0';

代码如下:

/*细胞数-dfs*/ 
#include <stdio.h>
int a[101][101];
int book[101][101];
int n,m,sum;
void dfs(int i,int j)
{
    int k,x,y;
    int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
    for(k = 0;k < 4;k++)
    {
        x = i+next[k][0];
        y = j+next[k][1];
        if(x<1||x>n||y<0||y>m-1)//边界 
        {
            continue;
        }
        if(a[x][y]>0&&book[x][y]==0)
        {
            book[x][y] = 1;
            dfs(x,y);
        }
    }

    return ;
}
int main()
{
    int i,j,startx,starty;
    char c[101];
    scanf("%d%d",&n,&m);
     for(i = 1;i <= n;i++)
     {
         scanf("%s",c);
         for(j = 0;j < m;j++)
         {
             a[i][j] =c[j]-'0';
         }
    }

    for(i = 1;i <= n;i++)
     {
         for(j = 0;j < m;j++)
         {
             if(a[i][j]>0&&book[i][j]==0)//是细胞,且未标记过 
             {
                 sum++; 
                 book[i][j] = 1;
                 dfs(i,j);
                 
            }
        }
    }
    printf("%d",sum);    
    return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_40761693/article/details/86999371