题目描述
题目描述
一矩形阵列由数字 000 到 999 组成,数字 111 到 999 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入格式
第一行两个整数代表矩阵大小 nnn 和 mmm。
接下来 nnn 行,每行一个长度为 mmm 的只含字符 0 到 9 的字符串,代表这个 n×mn \times mn×m 的矩阵。
输出格式
一行一个整数代表细胞个数。
样例
输入输出样例
输入 #1
4 10
0234500067
1034560500
2045600671
0000000089
输出 #1
4
易错点:忘记将已经搜过的细胞数字标记为非细胞数字0
因为细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,所以遇到细胞数字,把他们都变成0非细胞数字,因为它们属于同一细胞
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
char mapp[105][105];
int fx[4]={0,0,1,-1},fy[4]={1,-1,0,0};
void dfs(int x,int y){
mapp[x][y]='0';//把他们都变成非细胞数字0,因为它们属于同一细胞
for(int i=0;i<4;i++){
int a=x+fx[i];
int b=y+fy[i];
if(a>0&&a<=n&&b>0&&b<=m&&mapp[a][b]>='1'&&mapp[a][b]<='9'){
dfs(a,b);
}
}
}
int main(int argc, char** argv) {
int s=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
// scanf("%c",&mapp[i][j]);
cin>>mapp[i][j];
}
//getchar();
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mapp[i][j]>='1'&&mapp[i][j]<='9'){
s++;
dfs(i,j);
}
}
}
printf("%d\n",s);
return 0;
}