分析:深度优先搜索
#include<stdio.h>
#include<string.h>
#include<limits.h>
int map[22][22]; //存储
int w,h,max=INT_MIN;
int dx[]={0,1,0,-1},dy[]={-1,0,1,0};//定义方向,(-1,0)左移动,(1,0)右移动,(0,-1)上移动,(0,1)下移动
void dfs(int x,int y)
{
int i;
for(i=0;i<4;i++) //不用担心因为先封堵,造成后面把路堵死的情况
{
if(!map[x+dx[i]][y+dy[i]] && x+dx[i]<=h && y+dy[i]<=w && x+dx[i]>0 && y+dy[i]>0)
{ //第一行第一列没有存数据 //判断有没有出界
max++;//能走的格子加一
map[x+dx[i]][y+dy[i]]=1;//标记走过了
dfs(x+dx[i],y+dy[i]);
}
}
}
int main()
{
int i,j,x,y;
char c;
while(scanf("%d %d",&w,&h)&&(w||h))
{
max=0;//最多能走的格子数
memset(map,0,sizeof(map)); //每个都赋值0
for(i=1;i<=h;i++) //高,即行
{
getchar(); //接受换行符号
for(j=1;j<=w;j++) //宽
{
scanf("%c",&c);
if(c=='.') //能走
map[i][j]=0;
else if(c=='#') //墙的位置
map[i][j]=1;
else if(c=='@') //人的初始位置
{
map[i][j]=1;
x=i;y=j;max=1; //x,y为人的初始位置
}
}
}
dfs(x,y);
printf("%d\n",max);
}
return 0;
}