dfs裸题吧
#include<iostream>
#include<algorithm>
using namespace std;
char mapp[22][22];
int ans=1;
int n,m;
int x,y;
void dfs(int a,int b){
mapp[a][b] = '#';
ans++;
if( a-1 >0 &&mapp[a-1][b]=='.' )
dfs(a-1,b);
if(a+1 <= n && mapp[a+1][b] == '.')
dfs(a+1,b);
if(b-1 > 0 && mapp[a][b-1] == '.')
dfs(a,b-1);
if(b+1 <= m && mapp[a][b+1] == '.')
dfs(a,b+1);
}
int main(){
while(cin>>m>>n && n&& m)
{
memset(mapp,0,sizeof(mapp));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char c;
cin>>c;
if(c=='@')
{
x=i;
y=j;
}
mapp[i][j] = c;
}
mapp[x][y]='#';
if( x-1 >0 &&mapp[x-1][y]=='.' )
dfs(x-1,y);
if(x+1 <= n && mapp[x+1][y] == '.')
dfs(x+1,y);
if(y-1 > 0 && mapp[x][y-1] == '.')
dfs(x,y-1);
if(y+1 <= m && mapp[x][y+1] == '.')
dfs(x,y+1);
cout<<ans<<endl;
ans=1;
}
}