分析:挺简单的搜索,用DFS的时候把搜到的点置1,然后统计一下就行了。

Code
#include <iostream>
using namespace std;

int map[22][22];

void DFS(int x,int y)


{
if(map[x][y] == -1 || map[x][y] == 1)
return;
map[x][y] = 1;
DFS(x+1,y);
DFS(x-1,y);
DFS(x,y-1);
DFS(x,y+1);
}
int main()


{
int m,n;
char c;
while(cin>>n>>m,m+n)

{
int x,y;
memset(map,-1,22*22*sizeof(int));
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)

{
cin>>c;
switch(c)

{
case '.': map[i][j] = 0; break;
case '#': map[i][j] = -1; break;
case '@': map[i][j] = 0; x=i;y=j; break;
}
}
DFS(x,y);
int sum=0;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(map[i][j] == 1)
++sum;
cout<<sum<<endl;
}
return 0;
}
