1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 char map[105][105]; 7 8 int dir[8][2]={0, 1, 1, 0, -1, 0, 0, -1, 1, 1, 1, -1, -1, 1, -1, -1}; 9 int n, m; 10 int ans; 11 12 bool judge(int x, int y){ 13 if(x<1 || x>n || y<1 || y>m) return false; 14 return true; 15 } 16 17 void dfs(int x, int y, bool flag){ 18 19 if(map[x][y]=='@'){ 20 map[x][y]='*'; 21 ++ans; 22 for(int i=0; i<8; ++i){ 23 int xx=x+dir[i][0], yy=y+dir[i][1]; 24 if(judge(xx, yy) && map[xx][yy]=='@'){ 25 --ans; 26 dfs(xx, yy, 1); 27 } 28 } 29 if(flag) return;//flag==1表明没有将油田搜索完毕 30 } 31 32 for(int i=0; i<8; ++i){ 33 int xx=x+dir[i][0], yy=y+dir[i][1]; 34 if(judge(xx, yy) && map[xx][yy]!='#'){ 35 if(map[xx][yy]=='*') 36 map[xx][yy]='#'; 37 dfs(xx, yy, 0); 38 } 39 } 40 } 41 42 int main(){ 43 while(cin>>n>>m && (n||m)){ 44 for(int i=1; i<=n; ++i) 45 cin>>(map[i]+1); 46 ans=0; 47 dfs(1, 1, 0); 48 cout<<ans<<endl; 49 } 50 return 0; 51 }