zoj 2165

很简单的DFS搜索水题,递归理解深了很easy的!打了一遍就ac了

#include<stdio.h>

int atr[25][25];

int count=1,n,m;

void DFS(int x,int y)

{

    int i=0;

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

    {

        if(i==0)

        {

            if((y-1)>=0&&atr[y-1][x]==0)/*向上有点并且可以访问*/

            {

                count++;

                atr[y-1][x]=1;

                DFS(x,y-1);

            }

        }

        else if(i==1)

        {

            if((x+1)<m&&atr[y][x+1]==0)/*向上有点并且可以访问*/

            {

                count++;

                atr[y][x+1]=1;

                DFS(x+1,y);

            }

        }

        else if(i==2)

        {

            if((y+1)<n&&atr[y+1][x]==0)

            {

                count++;

                atr[y+1][x]=1;

                DFS(x,y+1);

            }

        }

        else if(i==3)

        {

            if((x-1)>=0&&atr[y][x-1]==0)

            {

                count++;

                atr[y][x-1]=1;

                DFS(x-1,y);

            }

        }

    }

}

int main(int argc, char* argv[])

{

    int i,j;

    char c;

    int sx,sy;    

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

    {

        count=1;

        getchar();

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

            {

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

                {

                scanf("%c",&c);

                if(c=='.')

                    atr[i][j]=0;

                else if(c=='#')

                    atr[i][j]=-1;

                else if(c=='@')

                {

                    atr[i][j]=1;

                    sx=j;sy=i;

                }

                }

                getchar();

            }

        DFS(sx,sy);

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

    }

    return 0;

}

 

你可能感兴趣的:(ZOJ)