#include<stdio.h> #include<string.h> #include<stdlib.h> int n,m; int hash[30][30]; char map[30][30]; void DFS(int x,int y) { if(x>n||y>m||hash[x][y]||map[x][y]=='#') return; hash[x][y]=1; DFS(x-1,y); DFS(x+1,y); DFS(x,y-1); DFS(x,y+1); } int main() { while(scanf("%d%d%*c",&m,&n),n||m)//注意m,n的顺序,且要加%*c否则出错因为后面接下来的是字符输入,如果不加回车将会以字符读入。 { int x,y; memset(hash,0,sizeof(hash)); for(int i=0;i<30;i++) { for(int j=0;j<30;j++) { map[i][j]='#'; } }//注意初始化 for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%c",&map[i][j]); if(map[i][j]=='@') { x=i; y=j; } } getchar();//注意加getchar()否则会将空行当字符输入。 } DFS(x,y); int sum=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(hash[i][j]) { sum++; } } } printf("%d\n",sum); } //system("pause"); return 0; }