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);
        }
    }
}
相關文章
相關標籤/搜索