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);
    }
}
View Code

 

posted on 2013-08-01 15:06  blieveboy  阅读(72)  评论(0编辑  收藏  举报

导航