http://poj.org/problem?id=1979
嗯、模板题。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; bool vis[21][21]; int cnt,w,h; void dfs(int x,int y) { if(x>0&x<=w&&y>0&&y<=h&&!vis[x][y]) { ++cnt; vis[x][y]=true; dfs(x+1,y); dfs(x,y+1); dfs(x-1,y); dfs(x,y-1); } } int main(void) { int x,y,i,j; char c; while(scanf("%d%d",&w,&h),w&&h) { memset(vis,0,sizeof(vis)); cnt=0; for(j=1;j<=h;j++) for(i=1;i<=w;i++) { cin>>c; if(c=='#') vis[i][j]=true; if(c=='@') x=i,y=j; } dfs(x,y); printf("%d\n",cnt); } return 0; }