1 #include"cstring" 2 #include"cstdio" 3 const int maxn=20+5; 4 char tile[maxn][maxn];//方块格子 5 int m,n,idx[maxn][maxn];//m行n列 ,idx判断是否访问过 6 int a[]={-1,0,1,0}; 7 int b[]={0,-1,0,1};//移动 8 int num; //黑格子数目 9 void dfs(int r,int c){ 10 if(r<0||r>=m||c<0||c>=n) return;//出界 11 if(idx[r][c]>0||tile[r][c]=='#') return; //已经访问的格子或者红色格子 12 idx[r][c]=++num;//如果tile未访问过,标记访问,num+1 13 for(int i=0;i<4;i++){ 14 dfs(r+a[i],c+b[i]); 15 } 16 } 17 int main(){ 18 while(scanf("%d%d",&n,&m)==2&&n&&m){ 19 for(int i=0;i<m;i++) 20 scanf("%s",tile[i]); 21 memset(idx,0,sizeof(idx)); 22 num=0; 23 for(int i=0;i<m;i++) 24 for(int j=0;j<n;j++) 25 if(tile[i][j]=='@'){ 26 27 dfs(i,j); 28 break; 29 } 30 printf("%d ",num); 31 } 32 return 0; 33 } 34