知识点:深搜
比较基础的深搜,判断有几个连通块
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int n, m, vis[N][N], cnt;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
string s[N];
void dfs(int x, int y, char ch) {
for (int i = 0; i < 4; i++) {
int x1 = x + dx[i];
int y1 = y + dy[i];
if (x1 < 1 || x1 > n || y1 < 1 || y1 > m) continue;
if (vis[x1][y1] || s[x1][y1] != ch) continue;
vis[x1][y1] = 1;
dfs(x1, y1, ch);
}
}
int main() {
while (cin >> n >> m && n) {
for (int i = 1; i <= n; i++) {
cin >> s[i];
s[i] = " " + s[i];
}
cnt = 0;
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (!vis[i][j]) {
vis[i][j] = 1;
dfs(i, j, s[i][j]);
cnt++;
}
}
}
cout << cnt << endl;
}
return 0;
}