類似走迷宮。。。簡(jiǎn)單的深度搜索,遞歸就行了
#include <iostream>
#include <string>
using namespace std;

char tiles[101][101];
int used[101][101];
int count,w,h;

void countstep(int i,int j)


{
count++;
if (i>1&&used[i-1][j]==0) //向上

{
used[i-1][j]=1;countstep(i-1,j);
}
if (i<h&&used[i+1][j]==0) //向下

{
used[i+1][j]=1;countstep(i+1,j);
}
if (j>0&&used[i][j-1]==0) //向左

{
used[i][j-1]=1;countstep(i,j-1);
}
if (j<w-1&&used[i][j+1]==0) //向右

{
used[i][j+1]=1;countstep(i,j+1);
}
}
int main()


{
int starti,startj;
while (scanf("%d %d",&w,&h)!=EOF)

{
if (w==0||h==0)
break;
count=0;
memset(used,0,sizeof(used));
for (int i=1;i<=h;i++)

{
scanf("%s",&tiles[i]);
}
for(int i=1;i<=h;i++)

{
for (int j=0;j<w;j++)

{
if (tiles[i][j]=='#')
used[i][j]=1;
else if (tiles[i][j]=='@')

{
used[i][j]=1;
startj=j;
starti=i;
}
}
}
countstep(starti,startj);
printf("%d\n",count);
}
}

