hdu 1312 dfs
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; const int N= 21; char map[N][N]; bool mark[N][N]; int dir[4][2] = {1, 0, -1, 0, 0 ,1, 0 , -1}; int w,h,dx,dy,ans; void dfs( int x, int y) { int i; mark[x][y] = true; for( i = 0; i < 4; i++) { int p = x +dir[i][0]; int q = y +dir[i][1]; if( p >= 0 && q >= 0 && p < h && q < w && !mark[p][q] && map[p][q] != '#') { ans ++; dfs(p,q); } } } int main() { int i,j,k; while(scanf("%d%d",&w,&h) && ( w || h) ) { memset( mark, false, sizeof(mark)); for( i = 0; i < h ; i++) for( j = 0; j < w ; j++) { cin>>map[i][j]; if(map[i][j] == '@') { dx = i; dy = j; } } ans = 1; dfs( dx, dy); printf("%d\n",ans); } }