uva 784 Maze Exploration

搜索水题,其实就是一个图的遍历(因为放在数据结构图专题中)

给你一个图,以一整行的"_________"作为这个图的结束

然后"X"表示不能到达,空格是能到达的,"*"也是可以到达的,并且是一个起点,要求从所有的起点出发,能到达的地方都标记为"#"

然后输出标记后的整个图,"_______"也是要输出的

另外注意这个图不一定是一个矩阵,可能是不规则的,例如

 

XXXXXXXXX

X   X   X

X *     X

X   X   X

XXXXXXXXX

X   X

X   X

X   X

XXXXX

_____

 

当然这些都是没有关系的,就直接遍历好了,已经标记了"#"的点不要再访问

 

先给出DFS代码

#include <stdio.h>

#include <string.h>

#define N 35

#define M 85

char g[N][M];

int n;

int x[5]={0,-1,1,0,0} , y[5]={0,0,0,-1,1};

void input()

{

    int i;

    memset(g,0,sizeof(g));

    n=1;

    while(1)

    {

        gets(g[n]);

        if(g[n][0]=='_') return ;

        n++;

    }

}



void dfs(int i , int j)

{

    int k,xx,yy;

    for(k=1; k<=4; k++)

    {

        xx=i+x[k];

        yy=j+y[k];

        if(xx>=1 && xx<=n && yy>=0 && (g[xx][yy]==' ' || g[xx][yy]=='*') )

        {

            g[xx][yy]='#';

            dfs(xx,yy);

        }

    }

}



int main()

{

    int T,i,j;

    scanf("%d",&T); getchar();

    while(T--)

    {

        input();

/*

        printf("^^^^^^^^^^^^^^^^^\n");

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

            printf("%s\n",g[i]);

*/

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

            for(j=0; g[i][j]!='\0'; j++)

                if(g[i][j]=='*')

                    dfs(i,j);



//        printf("bbbbbbbbbbbbbbbbbbbbbb\n");

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

            printf("%s\n",g[i]);

//        printf("eeeeeeeeeeeeeeeeeeeeee\n");

    }

    return 0;

}

 

 

这个是BFS代码

#include <stdio.h>

#include <string.h>

#include <queue>

using namespace std;

#define N 35

#define M 85

char g[N][M];

int n;

int x[5]={0,-1,1,0,0} , y[5]={0,0,0,-1,1};

struct node

{int i,j;};

queue<struct node> q;



void input()

{

    int i;

    memset(g,0,sizeof(g));

    n=1;

    while(1)

    {

        gets(g[n]);

        if(g[n][0]=='_') return ;

        n++;

    }

}



void bfs()

{

    int i,j,k,xx,yy;

    struct node tmp,ttmp;

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

        for(j=0; g[i][j]!='\0'; j++)

            if(g[i][j]=='*')

            {

                while(!q.empty()) q.pop();

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

                tmp.i=i;

                tmp.j=j;

                q.push(tmp);  //

                while(!q.empty())

                {

                    tmp=q.front();

                    q.pop();

                    for(k=1; k<=4; k++)

                    {

                        xx=tmp.i+x[k];

                        yy=tmp.j+y[k];

                        if(xx>=1 && xx<=n && yy>=0 && (g[xx][yy]==' ' || g[xx][yy]=='*') )

                        {

                            g[xx][yy]='#';

                            ttmp.i=xx;

                            ttmp.j=yy;

                            q.push(ttmp);

                        }

                    }

                }

            }

}



int main()

{

    int T,i,j;

    scanf("%d",&T); getchar();

    while(T--)

    {

        input();



        bfs();



//        printf("bbbbbbbbbbbbbbbbbbbbbb\n");

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

            printf("%s\n",g[i]);

//        printf("eeeeeeeeeeeeeeeeeeeeee\n");

    }

    return 0;

}

 

你可能感兴趣的:(exp)