首页 > 代码库 > 求细胞数量——dfs

求细胞数量——dfs

  最近重新回顾了一下dfs,于是就打了洛谷上“求细胞数量”这一题。

  这题注意要在输入时是一个一个数字读取的,因为在输入矩阵的时候没有空格。我就随便改了一下快读。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int getin(){
    int num=0;
    char c=getchar();
    while(c>9||c<0)c=getchar();
    num=c-0; 
    return num;
}
int a[101][101],n,m,ans=0;
const int tx[4]={-1,0,0,1};
const int ty[4]={0,-1,1,0};
void dfs(int x,int y){
    a[x][y]=0;
    for(int i=0;i<4;i++){
        x+=tx[i];y+=ty[i];
        if(x>0&&x<=n&&y>0&&y<=m&&a[x][y]!=0)dfs(x,y);
        x-=tx[i];y-=ty[i];
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=getin();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==0)continue;
            dfs(i,j);ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}

 

求细胞数量——dfs