POJ3984-迷宫问题【BFS】
定义一个二维数组:
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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
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
Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
思路:广搜问题,关键是要在访问的同时记录路径,以便输出路径。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <queue>
using namespace std;
int a[6][6],d[10][10],vis[6][6];
struct node
{
    int r,c;
};
queue <node> que;
node father[10][10];    //记录父节点,方便打印
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
vector<node> nodes;     //记录路径
void print(node u)
{
    while(1)
    {
        nodes.push_back(u);  //尾部加入元素
        if(d[u.r][u.c]==0)
            break;            //头结点
        u=father[u.r][u.c];
    }
    for(int i=nodes.size()-1;i>=0;--i)
        printf("(%d, %d)\n",nodes[i].r,nodes[i].c);
}
void bfs()
{
    node zero;
    zero.c=0,zero.r=0;
    d[0][0]=0,vis[0][0]=1;
    que.push(zero);
    while(!que.empty())
    {
        node front=que.front();
        que.pop();
        if(front.r==4 && front.c==4)
        {
            print(front);
            return;
        }
        for(int i=0;i<4;++i)
        {
            int x=front.r+dx[i];           //分别向上下左右访问
            int y=front.c+dy[i];
            node v;
            v.r=x,v.c=y;
            if(x>=0 && x<5 && y>=0 && y<5 && a[x][y]==0 && !vis[x][y])
            {
                d[x][y]=d[front.r][front.c]+1;   //记录层数
                father[x][y]=front;              //记录父节点
                vis[x][y]=1;                     //标记节点已经访问
                que.push(v);                     //插入队列
            }
        }
    }
}
int main()
{
    for(int i=0;i<5;++i)
        for(int j=0;j<5;++j)
            scanf("%d",&a[i][j]);
    bfs();
}POJ3984-迷宫问题【BFS】的更多相关文章
- POJ-3984.迷宫问题(BFS + 路径输出)
		昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ... 
- POJ3984 迷宫问题 —— BFS
		题目链接:http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions ... 
- POJ3984 迷宫问题 BFS
		看题传送门:http://poj.org/problem?id=3984 BFS水一发 明天帮学弟挑电脑顺便去玩.接下来几天好好看数据结构.嗯哼. 这题标准的BFS应用,唯一需要注意的是需要输出中间的 ... 
- 2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)
		这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 正解类似:POJ-3984 迷宫问题 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔 ... 
- Poj3984 迷宫问题 (BFS + 路径还原)
		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, ... 
- POJ-3984 迷宫问题(BFS找最短路径并保存)
		问题: 定义一个二维数组: 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, ... 
- poj3984 迷宫问题(简单的输出路径的bfs)
		题目链接 http://poj.org/problem?id=3984 中文题题意不解释了 反正就是简单的结构体套结构体存一下路径就行了 #include <iostream> #incl ... 
- POJ-3984 迷宫问题 (BFS)
		题意:有一个\(5\)X\(5\)的\(01\)图,输出从左上角走到右下角的最短路径. 题解:基础的bfs,这里困难的是如何输出这个最短路径,我们可以用一个结构体来存点和路径,我们每次向外去拓展的时候 ... 
- POJ3984 迷宫问题【水BFS】
		版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011775691/article/details/28050277 #include <cs ... 
- poj3984迷宫问题 广搜+最短路径+模拟队列
		转自:http://blog.csdn.net/no_retreats/article/details/8146585 定义一个二维数组: int maze[5][5] = { 0, 1, 0, ... 
随机推荐
- SpringBoot中logback.xml使用application.yml中属性
			教你如何使用 springProfile 与 springProperty 让你的logback.xml 配置显得更有逼格,当别人还在苦苦挣扎弄logback-{profile}.xml的时候 你一个 ... 
- 洛谷 P1535 游荡的奶牛
			P1535 游荡的奶牛 题目描述 Searching for the very best grass, the cows are travelling about the pasture which ... 
- Android学习心得(13) --- Android代码混淆(1)
			我在博客上发表一些我的Android学习心得,希望对大家能有帮助. 这一篇我们讲述一下最新的ADT环境下怎样进行Android混淆 在新版本号的ADT创建项目时.混码的文件不再是proguard.cf ... 
- 【cl】eclipse基本设置(字体、配置JDK)
			字体 找到上面的菜单“windows”打开Preferences 在弹出的设置窗口中找到“colors and fonts” 将 ... 
- UVA 4855 Hyper Box
			You live in the universe X where all the physical laws and constants are different from ours. For ex ... 
- 高可用技术工具包 High Availability Toolkit
			HighAvailabilityToolkit High Availability Toolkit includes several solutions by which achieving arch ... 
- nexus启动报错----->错误 1067: 进程意外终止。
			1.今天启动nexus报错: 2.错误信息 错误 1067: 进程意外终止. 3.检查发现我之前把jdk升级了.然而nexus之前指定的jdk将不再生效. 4.解决办法 找到nexus安装目录 修改b ... 
- [转]详细解读TrueSkill 排名系统
			概要 大多数竞技游戏都有一个评价玩家是否完成目标的度量指标,它是游戏的基础.对于包含两个或两个以上玩家(多玩家比赛)的比赛,常涉及到游戏玩家技能的排名方法.游戏鼓励玩家之间相互竞争,玩家不只要赢得单场 ... 
- 国外物联网平台初探(三) ——IBM Watson IoT
			平台定位 提供全面管理的云托管服务,旨在简化并从 IoT 设备中获得价值. Watson IoT Platform 提供对 IoT 设备和数据的强大应用程序访问,可快速编写分析应用程序.可视化仪表板和 ... 
- [BZOJ 2100] Apple Delivery
			[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2100 [算法] Answer = min{ dist(PB,PA1) + dist( ... 
