http://poj.org/problem?id=1979
很水。
#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;
const int maxn=25;
char maze[maxn][maxn];
int ans,N,M,sx,sy;
int dir[4][2]={-1,0,1,0,0,-1,0,1};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int nx=x+dir[i][0],ny=y+dir[i][1];
if(nx<0 || nx>=N || ny<0|| ny>=M)continue;
if(maze[nx][ny]=='#' || maze[nx][ny]=='@') continue;
ans++;
maze[nx][ny]='#';
dfs(nx,ny);
}
}
int main(){
//ifstream fin;
//fin.open("input.txt");
while(cin>>M>>N){
if(N+M==0)break;
for(int i=0;i<N;i++)
for(int j=0;j<M;j++){
cin>>maze[i][j];
if(maze[i][j]=='@'){
sx=i;sy=j;
}
}
ans=0;
dfs(sx,sy);
cout<<ans+1<<endl;
}
return 0;
}