poj1979
#include<iostream> using namespace std; char map[25][25]; int n,m; int sx,sy; int vis[25][25]; typedef struct node { int x; int y; }node; node queue[10000]; int sum; int dx[4]={-1,0,1,0}; int dy[4]={0,1,0,-1}; void bfs(int x, int y) { int head,tail; head=0,tail=0; node startnode; startnode.x=x; startnode.y=y; queue[tail++]=startnode; vis[x][y]=1; while(head!=tail) { node cur,next; cur=queue[head++]; sum++; for(int i=0;i<4;i++) { next.x=cur.x+dx[i]; next.y=cur.y+dy[i]; if(next.x>=0&&next.y>=0&&next.x<m&&next.y<n&&vis[next.x][next.y]==0&&map[next.x][next.y]=='.') { vis[next.x][next.y]=1; queue[tail++]=next; } } } } int main() { //freopen("input.txt","r",stdin); while(1) { cin>>n>>m; if(n==0&&m==0) break; for(int i=0;i<m;i++) cin>>map[i]; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { vis[i][j]=0; if(map[i][j]=='@') { sx=i; sy=j; } } } sum=0; bfs(sx,sy); cout<<sum<<endl; } return 0; }