zoj 2165

7244 단어 ZOJ
아주 간단한 DFS 수문제 검색, 차례로 이해가 깊어지고 아주 쉽습니다!한 번 때리면 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
",count); } return 0; }

좋은 웹페이지 즐겨찾기