hdu 1312 Red and Black
#include<stdio.h> int w,h,ans; char a[30][30]; int d[4][2]={{0,-1},{0,1},{1,0},{-1,0}}; int dfs(int i,int j) { int ii,jj; for(int k=0;k<4;k++) { ii=i+d[k][0]; jj=j+d[k][1]; if(ii<h&&jj<w&&ii>=0&&jj>=0&&a[ii][jj]=='.') { ans++; a[ii][jj]='#'; dfs(ii,jj); } } return 0; } int main() { int x,y; while(scanf("%d %d",&w,&h)!=EOF&&w!=0&&h!=0) { getchar(); for(int i=0;i<h;i++) { for(int j=0;j<w;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='@') { x=i; y=j; } } getchar(); } ans=0; a[x][y]='#'; dfs(x,y); printf("%d\n",ans+1); } return 0; }