/* coder: ACboy date:2010-3-16 result: 1A description: UVa 572 Oil Deposits */ #include <iostream> using namespace std; int m, n; int data[256][256]; int vis[256][256]; int dx[] = {0, 1, -1, 1, 0, -1, 1, -1}; int dy[] = {1, 0, 1, -1, -1, 0, 1, -1}; //深度优先遍历 void dfs(int x, int y) { vis[x][y] = 1; int newx, newy; for (int i = 0; i < 8; ++i) { newx = x + dx[i]; newy = y + dy[i]; if (newx >= 0 && newx < m && newy >= 0 && newy < n && !vis[newx][newy] && data[newx][newy]) { vis[newx][newy] = 1; dfs(newx, newy); } } } int main() { #ifndef ONLINE_JUDGE freopen("572.txt", "r", stdin); #endif while (cin >> m >> n) { if (n == m && m == 0) break; int i, j; char temp; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { cin >> temp; if (temp == '*') { data[i][j] = 0; } else { data[i][j] = 1; } } } memset(vis, 0, sizeof(vis)); int count = 0; for (i = 0; i < m; ++i) { for (j = 0; j < n; j++) if(!vis[i][j] && data[i][j]){ count++; dfs(i, j); } } cout << count << endl; } return 0; }