类似走迷宫。。。简单的深度搜索,递归就行了

#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);
   }

}