八个方向dfs,统计个数。
#include<stdio.h> #define MAX 105 int map[MAX][MAX]; int m, n; void dfs(int i, int j) { if (i < 0 || j < 0 || i > m || j > n) return; if (map[i][j] == 0) return; map[i][j] = 0; dfs(i - 1, j - 1); dfs(i - 1, j); dfs(i - 1, j + 1); dfs(i, j - 1); dfs(i, j + 1); dfs(i + 1, j - 1); dfs(i + 1, j); dfs(i + 1, j + 1); } int main() { char ch; while (scanf("%d%d", &m, &n) != EOF) { if (m == 0) break; int i, j; int ans = 0; getchar(); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%c", &ch); if (ch == '@') map[i][j] = 1; else map[i][j] = 0; } getchar(); } for (i = 0; i < m; i++) for (j = 0; j < n; j++) { if (map[i][j]) { dfs(i, j); ans++; } } printf("%d\n", ans); } return 0; }