题目描述
一矩形阵列由数字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;
}