1009: 细胞(dfs的用法之一)

题目:1009: 细胞
Description
一矩形阵列由数字0到9组成,数字1到9表明细胞。
细胞的定义为沿细胞数字上下左右仍是细胞数字则为同一细胞。
求给定矩形阵列的细胞个数。
如阵列  
4  10
0234500067
1034560500
2045600671
0000000089
有4个细胞。
Input
第一行包含2个整数n和m,分别表示矩形阵列的行数和列数。
接下来的n行,每行m个数字,表明细胞的矩形阵列。
Output
输出细胞的个数。
Sample Input
4 10
0234500067
1034560500
2045600671
0000000089
Sample Output
4函数

思路:这个题目的大致意思是输入的细胞矩阵,只要是数字相邻而且相连(且不能是0!),即为一个细胞;
因此这个用dfs的方法,即每次排查的时候,找到若是不是0,则进入函数,先将这个位置给变成0,而后再排查其相邻的全部范围是否有非0项,有则将其变为0(由于相邻的话就算做一个细胞了);就这样依次排查进行便可;code

代码:ip

#include<stdio.h>



void dfs(int ,int );
int t_x[]={0,-1,0,1};
int t_y[]={-1,0,1,0};
int n,m;
char a[1000][1000];
int main()
{
    int i,j,sum;
    while(scanf("%d%d",&n,&m)!=EOF){
        sum=0;
        for(i=0;i<n;++i){
            scanf("%s",a[i]);
        }
        for(i=0;i<n;++i){
            for(j=0;j<m;++j)
            if(a[i][j]!='0'){
                sum++;
                                //printf("%d %d",i,j);
                dfs(i,j);
                //printf("%d %d",i,j);
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

void dfs(int x,int y)
{
    int xx,yy;
    a[x][y]='0';
    for(int i=0;i<4;++i){
        xx=t_x[i]+x;yy=t_y[i]+y;
        if(xx<n&&xx>=0&&yy<m&&yy>=0)
        {
            if(a[xx][yy]!='0')
                dfs(xx,yy);
        }
    }
}
相关文章
相关标签/搜索