码迷,mamicode.com
首页 > 其他好文 > 详细

poj 3984 迷宫问题 (BFS+记录路径)

时间:2015-04-22 13:15:17      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

题目连接:http://poj.org/problem?id=3984

题解:简单的BFS+记录路径,具体题解看代码注释。

#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;

struct point
{
    int x;
    int y;
};
queue<point>q;
int map[5][5];
int vis[5][5];//标记走过的路
int g[4][2]={0,1,0,-1,1,0,-1,0};//四个方向
int lx[5][5],ly[5][5];//记录到达这个点的前一个点

void bfs()
{
    point p;
    p.x=0;
    p.y=0;
    q.push(p);
    while(!q.empty())
    {
        p=q.front();
        q.pop();
        if(p.x==4 && p.y==4)
            return;
        for(int i=0;i<4;i++)
        {
            int x=p.x+g[i][0];
            int y=p.y+g[i][1];
            if(x<0 || x>4 || y<0 || y>4 || vis[x][y] || map[x][y])
                continue;
            point temp;
            temp.x=x;
            temp.y=y;
            q.push(temp);
            vis[x][y]=1;   //对走过的路进行标记
            lx[x][y]=p.x;  //记录到达这个点的前一个点的x坐标
            ly[x][y]=p.y;  //记录到达这个点的前一个点的y坐标
        }
    }
}

void cout_way(int x,int y)//递归输出
{
    if(x||y) cout_way(lx[x][y],ly[x][y]);
    printf("(%d, %d)\n",x,y);
}
int main()
{
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            cin>>map[i][j];
    bfs();
    cout_way(4,4);
    /*for(int i=0;i<5;i++)//每一个状态之前的状态
    {
        for(int j=0;j<5;j++)
            printf("(%d,%d) \n",lx[i][j],ly[i][j]);
        cout<<endl;
    }*/
    return 0;
}

 

poj 3984 迷宫问题 (BFS+记录路径)

标签:

原文地址:http://www.cnblogs.com/mgxj/p/4446831.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!