Problem : http://acm.hdu.edu.cn/showproblem.php?pid=1312
简单搜索,不多说了...
#include<cstdio> int w,h,ans=0; char g[20][25]; bool f(int x,int y){ return (x>=0 && x<h && y>=0 && y<w); } void dfs(int x,int y){ ans++; g[x][y]='#'; for(int dx=-1;dx<=1;dx++) for(int dy=-1;dy<=1;dy++) if(dx==0 ^ dy==0){ if(f(x+dx,y+dy) && g[x+dx][y+dy]=='.') dfs(x+dx,y+dy); } } int main() { while(scanf("%d%d",&w,&h),w+h){ for(int i=0;i<h;i++) scanf("%s",&g[i]); ans=0; for(int i=0;i<h;i++) for(int j=0;j<w;j++) if(g[i][j]=='@') dfs(i,j); printf("%d ",ans); } return 0; }
其中异或^的运用,从神牛丽洁桑膜拜过来的...。