poj3984迷宫问题

一个5 × 5的二维数组,表示一个迷宫。其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

很简单的一道题,迷宫问题,一般都选择两种优先搜索方法去解,最短路线问题应该要用BFS,而不是DFS. 这道题目还需要记录路线,所以还加有存储父节点的一个空间。

贴代码如下(发现我只要是这两种方法,代码写的都不短啊):

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
typedef class{
public:
    int x,y;
    int fx,fy;
}vertex;


int maze[5][5];
int trace[5][5]={0};
vertex record[5][5];
void BFS()
{
    vertex start,end,v,n;
    start.x=0;start.y=0;
    end.x=4;end.y=4;
    trace[0][0]=1;
    record[0][0]=start;
    queue<vertex> dfq;
    vector<vertex> path;
    dfq.push(start);
    while(dfq.size()!=0)
    {
        v=dfq.front();
        dfq.pop();
        if(v.x-1>=0&&maze[v.x-1][v.y]!=1&&trace[v.x-1][v.y]==0)
        {
            trace[v.x-1][v.y]=1;
            n.x=v.x-1;n.y=v.y;n.fx=v.x;n.fy=v.y;
            dfq.push(n);
            record[n.x][n.y]=n;
        }
        if(v.x+1<=4&&maze[v.x+1][v.y]!=1&&trace[v.x+1][v.y]==0)
        {
            trace[v.x+1][v.y]=1;
            n.x=v.x+1;n.y=v.y;n.fx=v.x;n.fy=v.y;
            dfq.push(n);
            record[n.x][n.y]=n;
        }
        if(v.y-1>=0&&maze[v.x][v.y-1]!=1&&trace[v.x][v.y-1]==0)
        {
            trace[v.x][v.y-1]=1;
            n.x=v.x;n.y=v.y-1;n.fx=v.x;n.fy=v.y;
            dfq.push(n);
            record[n.x][n.y]=n;
        }
        if(v.y+1<=4&&maze[v.x][v.y+1]!=1&&trace[v.x][v.y+1]==0)
        {
            trace[v.x][v.y+1]=1;
            n.x=v.x;n.y=v.y+1;n.fx=v.x;n.fy=v.y;
            dfq.push(n);
            record[n.x][n.y]=n;
        }
    }
    int flag=1,x=4,y=4;
    while(flag)
    {
        vertex w=record[x][y];
        path.push_back(w);
        if(x==0&&y==0) flag=0;
        else{
            x=w.fx;y=w.fy;
        }
    }
    for(int i=path.size()-1;i>=0;i--)
    {
        cout<<"("<<path[i].x<<", "<<path[i].y<<")"<<endl;
    }
}
            
    


int main()
{
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
        {
            cin>>maze[i][j];
        }
   BFS();
   return 0;
}

 

posted on 2013-07-12 09:46  soyscut  阅读(290)  评论(0编辑  收藏  举报

导航