简单dfs
对于每一个不为‘0’且未被访问的地方开始dfs搜索,将其连通不为‘0’的地方vis数组置为0(之后无需访问访问),ans++。
//
// Created by 29273 on 2022-03-09.
//
#include "bits/stdc++.h"
using namespace std;
char a[101][101];
int vis[101][101];
int n, m, ans;
int dir[4][2] = {{1, 0},
{-1, 0},
{0, -1},
{0, 1}};
int judge(int x, int y) {
return x >= 0 && y >= 0 && x < n && y < m;
}
void dfs(int x, int y) {
for (int i = 0; i < 4; ++i) {
int dx = x + dir[i][0];
int dy = y + dir[i][1];
if (judge(dx, dy) && !vis[dx][dy] && a[dx][dy] != '0') {
vis[dx][dy] = 1;
dfs(dx, dy);
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> a[i][j];
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (!vis[i][j] && a[i][j] != '0') {
ans++;
dfs(i, j);
}
}
}
cout << ans << endl;
return 0;
}