题目描述
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
解题思路
如上图所示,该矩阵可以划分为4个细胞。对该矩阵进行扫描,如果当前元素不为0,细胞个数加1,然后对其四个方向进行递归,然后将当前元素置为0。这样子通过两重循环就可以找到矩阵中的细胞个数。
代码实现
#include <iostream>
#include <queue>
#define maxn 105
using namespace std;
char temp;
int n,m,ans;
int arr[maxn][maxn];
bool book[maxn][maxn];
int dx[] = {0,0,-1,1};
int dy[] = {1,-1,0,0};
void dfs(int x,int y){
for(int i = 0; i < 4; i ++){
int X = x+dx[i];
int Y = y+dy[i];
if(X <= 0 || X > n || Y <= 0 || Y > m){
continue;
}
if(!arr[X][Y]){
continue;
}
arr[X][Y] = 0;
dfs(X,Y);
}
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++){
cin >> temp;
arr[i][j] = temp-'0';
}
}
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++) {
if(arr[i][j]){
book[i][j] = true;
dfs(i,j);
ans ++;
}
}
}
cout << ans << endl;
return 0;
}