#include<iostream> using namespace std; int map[22][22]; int end_x,end_y,begin_x,begin_y; int sum; int dx[4]={0,1,0,-1}; int dy[4]={1,0,-1,0}; int temp_x=0,temp_y=0; int col,row; void DFS(int x,int y) { if(x>col||y>row||x<1||y<1)//和前面说的呼应 return ; for(int i=0;i<4;i++) { temp_x=dx[i]+x; temp_y=dy[i]+y; if(map[temp_x][temp_y]==0) { sum++; map[temp_x][temp_y]=-1; DFS(temp_x,temp_y); } } // return ; } int main() { int i, j ; char a[20]; while(1) { cin>>row>>col; sum=1; memset(map,-1,sizeof(map));//初始化为不可访问的点,和递归遍历有关键性的做用 if(col==0&&row==0) break; for(i=1;i<=col;i++) { cin>>a; for(j=1;j<=row;j++) { if(a[j-1]=='#') map[i][j]=-1; if(a[j-1]=='@') {begin_x=i;begin_y=j;} if(a[j-1]=='.') map[i][j]=0; } } DFS(begin_x,begin_y); cout<<sum<<endl; } return 0 ; }