L - Oil Deposits
1 #include <iostream> 2 #include <algorithm> 3 #include <queue> 4 using namespace std; 5 6 int n, m; 7 const int maxn = 105; 8 string s[maxn]; 9 int f[8][2] = { {0, 1},{1, 0},{-1, 0},{0, -1},{1, 1},{-1, -1},{1, -1},{-1, 1} }; 10 11 struct node{ 12 int x, y; 13 }now, last; 14 queue<node>q; 15 void bfs(int x, int y){ 16 while(!q.empty()) q.pop(); 17 last.x = x; 18 last.y = y; 19 q.push(last); 20 s[x][y] = '*'; 21 while(!q.empty()){ 22 last = q.front(); q.pop(); 23 for(int i = 0;i < 8;i++){ 24 now.x = last.x + f[i][0]; 25 now.y = last.y + f[i][1]; 26 27 if(now.x < 0 || now.y < 0|| now.x >= n || now.y >= m|| s[now.x][now.y] == '*') 28 continue; 29 q.push(now); 30 s[now.x][now.y] = '*'; 31 } 32 } 33 } 34 35 int main(){ 36 while(cin >> n >> m){ 37 if(n == 0 && m == 0 ) 38 break; 39 for(int i = 0;i < n;i++) 40 cin >> s[i]; 41 int ans = 0; 42 for(int i = 0;i < n;i++){ 43 for(int j = 0;j < m;j++){ 44 if(s[i][j] == '@'){ 45 ans++; 46 bfs(i, j); 47 } 48 } 49 } 50 cout << ans << endl; 51 } 52 return 0; 53 }