#include<stdio.h> int W, H; int count; int vis[30][30]; char str[30][30]; struct Point{ int x, y; }Start; int dx[]={-1,0,1,0}, dy[]={0,1,0,-1}; void Scan_Point();//输入函数 void DFS(struct Point p);//执行函数 int main() { while(scanf("%d%d",&H,&W)){ if(W==0 && H==0) break; count=1; Scan_Point(); DFS(Start); printf("%d\n",count); } return 0; } void Scan_Point(){ int i, j; getchar(); for(i=0; i<W; i++){ for(j=0; j<H; j++){ scanf("%c",&str[i][j]); vis[i][j]=1; if(str[i][j]=='@'){ Start.x=i; Start.y=j; } } getchar(); } } void DFS(struct Point p){ int a, b; int i, j; struct Point temp; for(i=0; i<4; i++){ a=p.x+dx[i]; b=p.y+dy[i]; temp.x=a; temp.y=b; if(a>=0 && a<W && b>=0 && b<H && str[a][b]=='.' && vis[a][b]){ count++; vis[a][b]=0; DFS(temp); } } return ; } /************************************************************** Problem: 2126 User: admin Language: C Result: Accepted Time:12 ms Memory:1148 kb ****************************************************************/