类似于迷宫问题
#include<iostream>
using namespace std;
char map[105][105];
int n,m;
int sum=0;
int direction[4][2]
{
{0,1},
{1,0},
{0,-1},
{-1,0}
};//控制走的方向
void dfs(int x,int y)
{
if(map[x][y]=='#')//走到'#'的地方返回
return ;
sum++;//增加点的个数
map[x][y]='#';//将走过的路标记,防止重复计数
for(int k=0;k<4;k++)
{
int a=x+direction[k][0];
int b=y+direction[k][1];
if (a>=1&&a<=n&&b>=1&&b<=m&&map[a][b]=='.')
dfs(a,b);
}
return ;
}
int main()
{
while(cin>>m>>n&&(n||m))
{
sum=0;
int x,y;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{
x=i;y=j;//标记起始点
}
}
dfs(x,y);
cout<<sum<<endl;
}
return 0;
}