Luogu P1451 求细胞数量

题目描述

一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<=m,n<=100)?

输入输出格式

输入格式:

输入:整数m,n(m行,n列)

矩阵

输出格式:

输出:细胞的个数

输入输出样例

输入样例#1:
4  10
0234500067
1034560500
2045600671
0000000089
输出样例#1:
4
解释样例:

0234500067

1034560500

2045600671

0000000089

一样的颜色表示为一个细胞

 

#include<bits/stdc++.h>
using namespace std;
int read()
{
int ret=0,ok=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')ok=-1;
ch=getchar();
}
for(;ch>='0'&&ch<='9';ch=getchar())
 ret=ret*10+ch-'0';
return ret*ok;
}
int ans=0;
int m,n;
int a[1000][1000];
inline void dfs(int x,int y)
{
    if(!a[x][y])
    return ;
    a[x][y]=0;//符0,表示搜过,不在搜了。
    dfs(x+1,y);//向上
    dfs(x-1,y);//向下
    dfs(x,y+1);//向右
    dfs(x,y-1);//向左
}
int main()
{
//freopen("cell.in","r",stdin);
//freopen("cell.out","w",stdout);
m=read(),n=read();
for(int i=1;i<=m;i++)
{
    for(int j=1;j<=n;j++)
    {
    scanf("%1d",&a[i][j]);//这个输入很关键,如果你cin,会错,你可以试试。 
    }
}
for(int i=1;i<=m;i++)
{
    for(int j=1;j<=n;j++)
    {
        if(a[i][j]!=0)
        {
            ans++;//找到一个,
            dfs(i,j);//又从这个点搜
        }
    }
}
cout<<ans<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/Hammer-cwz-77/p/7344002.html