输入:第一行两个整数代表矩阵大小 n 和 m。 接下来 n 行,每行一个长度为 m 的只含字符 0 到 9 的字符串,代表这个n×m 的矩阵。输出:一行一个整数代表细胞个数。题目描述 一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。c++
时间: 2023-05-30 09:05:33 浏览: 265
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005;
char matrix[MAXN][MAXN]; // 存储矩阵
bool vis[MAXN][MAXN]; // 标记矩阵中的位置是否被访问过
int n, m; // 矩阵大小
int dx[4] = {1, -1, 0, 0}; // 方向数组
int dy[4] = {0, 0, 1, -1};
void dfs(int x, int y) {
vis[x][y] = true; // 标记为已访问
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && !vis[nx][ny] && matrix[nx][ny] != '0') { // 满足条件则继续搜索
dfs(nx, ny);
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> matrix[i];
}
memset(vis, false, sizeof(vis));
int cnt = 0; // 细胞个数
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (!vis[i][j] && matrix[i][j] != '0') { // 该位置未被访问且不是空白位置
dfs(i, j);
cnt++; // 细胞个数+1
}
}
}
cout << cnt << endl;
return 0;
}
阅读全文