hdu 1312 Red and Black(dfs)

 

 

#include<cstdio>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

char mat[50][50];

int n,m;

int ans;

int op[4][2]={0,1,0,-1,1,0,-1,0};

bool ok(int x,int y)

{

    if(0<=x&&x<n&&0<=y&&y<m&&mat[x][y]=='.') return true;

    return false;

}

void dfs(int x,int y)

{

    ans++;

    for(int i=0;i<4;i++)

    {

       int tx=x+op[i][0];

       int ty=y+op[i][1];

        if(ok(tx,ty))

            {

                mat[tx][ty]='*';

                dfs(tx,ty);

            }

    }

}

int main()

{

    int i,j,k;

    int x,y;

    while(scanf("%d%d",&m,&n)!=EOF)

    {

        if(n==0&&m==0) break;

        ans=0;

        for(i=0;i<n;i++)

        {

            scanf("%s",mat[i]);

            for(j=0;j<m;j++)

            {

                if(mat[i][j]=='@') {x=i;y=j;}

            }

        }

        dfs(x,y);

        //for(i=0;i<n;i++) printf("%s\n",mat[i]);

        printf("%d\n",ans);

    }

    return 0;

}
View Code

 

你可能感兴趣的:(HDU)