简单深搜.
#include <stdio.h>
#include <string.h>
#define MAX 105
int dir[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};
char map[MAX][MAX];
bool visited[MAX][MAX];
int T;
int n, m;
void dfs(int x, int y) {
int i;
int nx, ny;
visited[x][y] = true;
for (i = 0; i < 4; i++) {
nx = x + dir[i][0];
ny = y + dir[i][1];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && map[nx][ny] != '.') {
if (!visited[nx][ny]) {
dfs(nx, ny);
}
}
}
}
int main() {
int i, j;
int ans;
while (scanf("%d", &T) != EOF) {
while (T--) {
memset(visited, false, sizeof(visited));
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++) {
scanf("%s", map[i]);
}
ans = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (map[i][j] == '#' && !visited[i][j]) {
dfs(i, j);
ans++;
}
}
}
printf("%d\n", ans);
}
}
return 0;
}