恩,直接DFS,还好,不算很慢
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
char map[21][21];
int n,m,cnt;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int si,int sj)
{
for(int k=0;k<4;k++)
{
int i=si+dir[k][0];
int j=sj+dir[k][1];
if(i>0&&i<=m&&j>0&&j<=n&&map[i][j]!='#')
{
map[i][j]='#';
cnt++;
dfs(i,j);
//cout<<i<<' '<<j<<endl;
}
}
return ;
}
int main()
{
int s1,s2;
while(cin>>n>>m&&(n||m))
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{s1=i;s2=j;}
}
}
map[s1][s2]='#';
cnt=1;
dfs(s1,s2);
cout<<cnt<<endl;
}
return 0;
}