迷宫问题---poj3984(bfs,输出路径问题)

题目链接

主要就是输出路径问题;

pre[x][y]表示到达(x,y)是由点(pre[x][y].x,  pre[x][y].y)而来;

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
#define N 220
#define INF 0xfffffff

int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
int map[N][N];
int vis[N][N], n, m;
struct node
{
    int x, y, step;
    friend bool operator<(node a, node b)
    {
        return a.step>b.step;
    }
}pre[N][N],path[N];

node bfs()
{
    memset(vis, 0,sizeof(vis));
    vis[0][0] = 1;
    priority_queue<node> Q;
    node p,q;
    p.x = p.y = p.step = 0;
    Q.push(p);
    while(Q.size())
    {
        p=Q.top(); Q.pop();
        if(p.x == 4 && p.y == 4)
            return p;
        for(int i=0; i<4; i++)
        {
            q.x=p.x+dir[i][0];
            q.y=p.y+dir[i][1];
            if(q.x>=0&&q.x<5 && q.y>=0&&q.y<5 && map[q.x][q.y]==0 && vis[q.x][q.y]==0)
            {
                vis[q.x][q.y] = 1;
                q.step = p.step + 1;
                pre[q.x][q.y].x = p.x;
                pre[q.x][q.y].y = p.y;
                Q.push(q);
            }
        }
    }
}

int main()
{
    for(int i=0; i<5; i++)
    {
        for(int j=0; j<5; j++)
            scanf("%d",&map[i][j]);
    }
    node ans = bfs();
    int step = ans.step, x = ans.x, y = ans.y;
    for(int i=step-1; i>=0; i--)
    {
        path[i].x = pre[x][y].x;
        path[i].y = pre[x][y].y;
        x = path[i].x;
        y = path[i].y;
    }
    for(int i=0;i<step;i++)
    {
        printf("(%d, %d)\n",path[i].x, path[i].y);
    }
    printf("(4, 4)\n");
    return 0;
}

时间: 2024-09-28 07:54:29

迷宫问题---poj3984(bfs,输出路径问题)的相关文章

迷宫问题 (BFS ?输出路径)

题目链接:http://poj.org/problem?id=3984 思路: 这道题的难点我觉得主要是在记录路径上面. 我们不能去记录当前的步数的走的坐标(x,y) ,因为这样会被后面的覆盖. 所以我们记录的应该是前一步所走的 具体代码: 1 #include <iostream> 2 #include <string> 3 #include <cstring> 4 #include <queue> 5 #include <string.h>

Ignatius and the Princess I (hdu 1026 优先队列+bfs+输出路径)

Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14624    Accepted Submission(s): 4634 Special Judge Problem Description The Princess has been abducted by the BEelzeb

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

题目连接: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]

地下迷宫(bfs输出路径)

题解:开一个pre数组用编号代替当前位置,编号用结构题另存,其实也可以i*m+j来代替,我写的有点麻烦了; 代码: #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <queue> using namespace std; #pragma(1) typedef struct No

蓝桥T291(BFS + 输出路径)

http://lx.lanqiao.org/problem.page?gpid=T291 学霸的迷宫 时间限制:1.0s   内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线.可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线. 输

poj_3984_迷宫问题_(bfs+记录路径)

前两天状态一直很不好,不知道为什么,感觉什么都没有掌握,很想回家.还好,今天调整过来啦,acm,try my best. 前两天一道题都没有ac,不能再这样了,每天都必须有ac. 嗯,说说这道题. 这道题明明就很水,结果我做了一个下午,囧. 迷宫问题 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description 定义一个二维数组: int maze[5]

(BFS 输出路径 pair)

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41913   Accepted: 23240 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走

bfs输出路径 &amp;&amp; 最短路(迪杰斯特拉)输出路径

问题描述 解决方法 1.像第一个问题那就是最短路问题(我代码采用迪杰斯特拉算法)实现 2.换乘次数最少,那就用bfs广搜来寻找答案.但是我的代码不能保证这个最少换乘是最短路程 代码 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<string.h> 5 #include<queue> 6 #include<vector> 7 using

hdu 1026 Ignatius and the Princess I(bfs搜索+输出路径)

题目来源:hdu-1026 Ignatius and the Princess I Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14677 Accepted Submission(s): 4653 Special Judge Problem Description The Princ