题目描述
一矩形阵列由数字 0 到 9组成,数字 1到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
题目限制
输入格式
第一行两个整数代表矩阵大小 n 和 m。
接下来 n 行,每行一个长度为 m 的只含字符 0
到 9
的字符串,代表这个n×m 的矩阵。
输出格式
一行一个整数代表细胞个数。
输入输出样例
解题思路
本题我用的dfs,读入后从非0的部分进入开始深搜,把搜过的非0部分标记为0,那么这样过去后一个细胞块被置0,此时计数+1
AC代码
#include <bits/stdc++.h>
using namespace std;
char Map[101][101];
int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
int n,m,cnt=0;
void dfs(int si,int sj);
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>Map[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(Map[i][j]=='0')
continue;
dfs(i,j); //从非0的部分进入开始深搜
cnt++; //结束后计数+1
}
}
cout<<cnt;
return 0;
}
void dfs(int si,int sj)
{
Map[si][sj]='0'; //把搜过的非0部分标记为0,那么这样过去后一整个细胞块被置0
for(int i=0;i<4;i++)
{
if(si+dir[i][0]>=1&&si+dir[i][0]<=n &&sj+dir[i][1]>=1&&sj+dir[i][1]<=m)
if(Map[si+dir[i][0]][sj+dir[i][1]]!='0')
{
dfs(si+dir[i][0],sj+dir[i][1]);
}
}
}