您的位置:首页 > 其它

杭电1312-搜索

2013-04-26 20:52 211 查看
深度优先搜索:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int n,m;

int hash[30][30];//记录是否是。 

char map[30][30];//迷宫,要初始化 

void DFS(int x,int y)

{

    if(x>n||y>m||hash[x][y]||map[x][y]=='#')

        return;//走过了,则不操作 

    hash[x][y]=1;//标记走过了 

    DFS(x-1,y);

    DFS(x+1,y);

    DFS(x,y-1);

    DFS(x,y+1);//深搜4个方向 

}

int main()

{

    while(scanf("%d%d%*c",&m,&n),n||m)//注意m,n的顺序,且要加%*c否则出错因为后面接下来的是字符输入,如果不加回车将会以字符读入。

    {

        int x,y;

        int i,j,sum;

        memset(hash,0,sizeof(hash));// 

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

        {

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

            {

                map[i][j]='#';

            }

        }//注意初始化

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

        {

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

             

            {

                scanf("%c",&map[i][j]);

                if(map[i][j]=='@')

                {

                    x=i;

                    y=j;

                }

            }

            getchar();//注意加getchar()否则会将空行当字符输入。

        }

        DFS(x,y);

        sum=0;

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

        {

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

            {

                if(hash[i][j])

                {

                    sum++;

                }

            }

        }

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

    }

   

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 ACM 杭电