1 #include<iostream>
2 #include<algorithm>
3 #include<cstring>
4 using namespace std;
5
6 int n,m,cnt;
7 char mp[110][110];
8 bool vis[110][110];
9 int dir[8][2]={{1,0},{1,1},{1,-1},{0,1},{0,-1},{-1,0},{-1,1},{-1,-1}};
10
11 void dfs(int x,int y) //对每个@ 都寻找旁边八个方向的@ ,并标记,成为一个整体
12 {
13 for(int i=0;i<8;i++)
14 {
15 int dx= x+dir[i][0];
16 int dy= y+dir[i][1];
17 if(dx<0||dx>n-1||dy<0||dy>m-1)
18 continue;
19 if(mp[dx][dy]=='@'&&vis[dx][dy]==0)
20 {
21 vis[dx][dy]=1;
22 dfs(dx,dy);
23 }
24 }
25 }
26
27 int main()
28 {
29 while(cin>>n>>m &&n &&m)
30 {
31 memset(vis,0,sizeof(vis));
32 cnt=0;
33
34 for(int i=0;i<n;i++)
35 cin>>mp[i];
36 for(int i=0;i<n;i++)
37 {
38 for(int j=0;j<m;j++)
39 {
40 if(mp[i][j]=='@'&&vis[i][j]==0)
41 {
42 cnt++;
43 dfs(i,j);
44 }
45 }
46 }
47 cout<<cnt<<endl;
48 }
49 }
HDU - 1241