poj 3984 迷宫问题 (BFS)

【算法】【题解】- POJ - 3984 迷宫问题(BFS入门例题) 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... 阅读详情

迷宫问题
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 24384 Accepted: 14223

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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

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)

Source


这是一道很经典的BFS。

思路:用结构体来存每个状态的x,y值,还有他们的标号以及到达这个状态前一个状态的标号(为了按照顺序输出)。每当搜索了一个点后就要把这个点做一个访问标记,防止下一次重复访问。每次符合条件的都可以将其状态压入队列中等待下一次的搜素。

最后搜到了(4,4)这个点就按照他们的标号依次输出出来就行了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int maze[6][6];
int vis[6][6],num=0;
struct node
{
    int x,y,pre,id;
}q[100];
void print(int num)
{
    if(q[num].pre!=-1)
        print(q[num].pre);
    printf("(%d, %d)\n",q[num].x,q[num].y);
}
void bfs(int x,int y)
{
    queue<node> que;
    q[num].x=x,q[num].y=y,q[num].id=num;
    q[num].pre=-1;
    que.push(q[num++]);
    while(!que.empty())
    {
        node tmp=que.front();
        que.pop();
        for(int i=0;i<4;i++)
        {
            int x=tmp.x+d[i][0];
            int y=tmp.y+d[i][1];
            if(x==4&&y==4)
            {
                q[num].x=x,q[num].y=y;
                q[num].pre=tmp.id,q[num].id=num;
                print(num);
                break;
            }
            if(x>=0&&x<=4&&y>=0&&y<=4&&!vis[x][y]&&maze[x][y]==0)
            {
                vis[x][y]=1;
                q[num].x=x,q[num].y=y;
                q[num].pre=tmp.id,q[num].id=num;
                que.push(q[num++]);
            }
        }
    }
}
int main()
{
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            scanf("%d",&maze[i][j]);
    memset(vis,0,sizeof(vis));
    bfs(0,0);
    return 0;
}


POJ3984迷宫问题(BFS入门+记录路径) 问题:传送门 关于BFS算法: 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 题目分析: ... 阅读详情

相关推荐

STM32与小米CyberGear微电机的CAN通信协议深度解析

本文深度解析STM32与小米CyberGear微电机的CAN通信协议,涵盖硬件连接、CAN总线配置、通信协议解析及多电机协同控制。重点介绍了基于STM32的电机控制实践,包括运动模式、速度与位置模式设置,以及数据反馈与故障诊断,为机器人及自动化设备开发提供实用指南。

www00的博客 361

POJ 3984---迷宫问题(BFS,迷宫最短路径且输出路径)

原题: BFS入门题,打印路径记录前驱就可以了。然后可以递归打印,也可以非递归打印路径: 递归打印路径: #include #include #include #include #include using namespace std; int maze[6][6]; int vis[6][6], dist[6][6]; int dr[] = { -1,1,0,0 }; int dc[]

sgh666666的博客 1656

使用OpenCV进行3D重建:详细指南

3D重建是计算机视觉领域的一项关键技术,它能够从二维图像中恢复出场景的三维结构。这项技术在机器人视觉、增强现实和3D建模等多个领域都有广泛的应用。在本篇技术博客中,我们将详细介绍如何使用OpenCV这一流行的计算机视觉库来实现3D重建。我们将逐步探讨整个过程,包括相机标定、特征点提取与匹配、立体校正、深度图计算以及最终的三维重建。3D重建是一个复杂的过程,涉及多个步骤和多种算法。OpenCV提供了强大的工具来支持这一过程,从相机标定到特征点提取与匹配,再到立体校正和深度图计算,最后实现三维重建。

weixin_41544125的博客 1317

POJ 3984 迷宫问题(BFS)

题目链接:http://poj.org/problem?id=3984题目大意:给定5*5的迷宫,求左上到右下最短路径,输出路径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, };它表示一个迷宫,...

baodream的博客 305

【数据集】中国各类水文专业常用数据集合集

对中国各类水文专业常用数据集进行整理并总结

WW、forever的博客 9304

AutoSAR配置与实践(基础篇)2.5 RTE对数据一致性的管理

SWC内部不同的Runnable访问共同全局变量,Runnable类似C文件中的函数,这些函数如果被放在不同Task上运行, 可能出现出现同一时刻多个函数共同运行的情况。可以通过为受影响的任务分配相同的优先级,为受影响的任务分配相同的内部操作系统资源,或者将OS的任务配置为非抢占性来实现。数据一致性:当多个操作同时读写同一个数据,由于任务的抢占,出现了数据被篡改的情况,造成非预期的数据结果。SWC内部变量保护,限定局变量的作用域在变量的作用域在SWC的不同runnable间。

nihaoljq2010的博客 2628

POJ 3984 迷宫问题 (BFS)

POJ 3984 迷宫问题 题意:

sxk 985

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 713

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, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Inp

Wabrush的博客 477

【华为OD技术面试真题 - 技术面】- python面试题(1)

华为OD面试技术面准备指南 华为OD面试技术面常见问题解答 华为OD面试技术面经验分享 华为OD面试技术面注意事项 华为OD面试技术面攻略 华为OD面试技术面模拟题目与解析 华为OD面试技术面知识点梳理 华为OD面试技术面常考

算法大师! 5534

巡检类机器人电池容量计算方法论(原理+算法+真实案例)

摘要:本文系统阐述了巡检机器人电池容量的计算方法,重点解析了;能量平衡;核心原理和三种主流算法。通过光伏电站履带式巡检机器人的真实案例,详细演示了从工况拆解、功耗采集到容量计算的完整流程。文章指出:室内轻载场景可采用静态平均功耗法,户外常规工况推荐动态负载积分法,而复杂环境需采用融合估算算法。特别强调需考虑温度修正(冬季容量衰减20%)、冗余系数(1.2-1.5)和放电深度(磷酸铁锂DoD取80%)等关键参数。

start_up_go的博客 243

POJ 迷宫问题+基础bfs

#include"stdio.h" #include"stdlib.h" struct dd{ int x; int y; }; int map[5][5]; int dir[4][2]={1,0,-1,0,0,1,0,-1}; //方向 struct dd queue[50],record[5][5]; //队列和路径 void bfs(

smilesmile2016的博客 317

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

bfs解决poj3984迷宫问题

poj3984迷宫问题 题目链接 题目叙述 给定一大小为5*5的数组,数组元素由0,1组成,0表示可以通过,1表示为墙壁,不可通过,而且只能向上,向下,向左,向右行走,现要求从(0,0)位置到(4,4)位置的最短路径。 解题思路 首先,求最短路径问题,很明显可以用到宽度优先搜索bfs,从(0,0)点开始,走四面可以走的路,然后再从这些路,找继续可以往下走的路,直到最先找到了一条路径可以走到(4,4)点,这里需要用到队列queue去储存从所在点的位置走一步可以到达的点,(在走的时候,需要注意坐标x,y都要在

weixin_43966538的博客 523

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

迷宫问题 (POJ - 3984 ,BFS + 路径输出)

一.题目链接: POJ-3984 二.题目大意: 给出一个迷宫,输出路径. 三.分析: 初学 bfs 的小伙伴在入坑 bfs 后,终于学会了判断迷宫问题是否能够到达终点。 那么, 现在又迎来了一个新的问题 —— 若迷宫的解唯一, 那么怎样输出迷宫路径呢 ? 比如 poj 3984 迷宫问题 在 AC 之后, 写这篇博客不仅是为了供大家学习,斧正, 更是为了自身的总结, 吸取教训。 ...

The___Flash的博客 1923

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

POJ3984 迷宫问题【BFS】

题目大意: 用一个5*5的二维数组表示迷宫,输出左上角到右下角的最短路径。 思路: 用BFS求最短路径。用pre[]来记录每个状态之前的状态,然后递归输出路径。

程序员充电站(itcharge) 3435

POJ3984 迷宫问题 BFS

<br />Problem Address:http://poj.org/problem?id=3984<br /> <br />求迷宫的最短路径。<br /> <br />本来是打算试一下怎么求迷宫的,结果最后做出来了。<br /> <br />BFS搜索,同时记录到达每一步的最小步数。<br /> <br />输出路径时则向前递归。<br /> <br />一次RTE后改大数组,然后AC。然后就不改了,直接保存……<br /> <br />如此凌乱的代码啊……不堪入目啊……<br /> <br />也正

Human_CK的专栏 983

POJ3984迷宫问题(BFS+队列+栈)

POJ-3984-迷宫问题 http://poj.org/problem?id=3984 大概思路:进行普通的BFS,用队列来操作。在保存路径的时候,可以用栈来输出路径,利用先进后出的特性。

Seawindson的博客 1680

POJ 3984 迷宫问题【迷宫最短路径 bfs】

POJ 3984 【迷宫最短路径 bfs】 题目链接 http://poj.org/problem?id=3984 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXL = 10; // 矩阵最大宽度 char maze[MAXL][MAXL]; // 迷宫 bool v

... 450

poj3984-迷宫问题(BFS)

# include # include int map[5][5]; int dir[4][2]={1,0,-1,0,0,1,0,-1}; struct node { int x,y; };struct node queue[33],record[5][5]; void bfs() { int head,tail,i; struct node cur,nex

Griffin_0的专栏 433

POJ 3984 迷宫问题 BFS DFS两种解法

题目地址:点这里迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Description定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1,

carbite1923 566

POJ3984 [ 迷宫问题 ] -- 图的BFS(基础)

广度优先搜索 (Breadth-First-Search),即BFS 用于寻找图中的   

Wolfgang_baozi 308

POJ 3984 迷宫问题(BFS+STL queue)

题目: POJ 3984 迷宫问题   传送门 经典的BFS求图的最短路径题目,从起点开始,按题目要求,对当前节点(x,y)向4个方向进行拓展,判断拓展的节点是否满足条件(是否越界,是否有被访问过,是否能走) 若满足条件,将这些节点push() 入队,(x,y)拓展完成后pop()出队,继续取队列中的头节点为当前节点继续拓展,直到拓展到中点,即按节点中储存的前驱节点信

Legend4ever的博客 1037

POJ 3984 迷宫问题 BFS

继续学习搜索,前几天写了该题的DFS解法,这次写了一个BFS。方法是自己模拟了一个队列。 此题关键点是模拟队列,用front和rare模拟出入队,用下标pre模拟指针,指向上一个节点。例如(4,4)为最后一个点,pre指向15,即上一个点的位置是15,递归输出。此题切入点是用什么结构暂存搜索结果,例如栈,队列等等 如果不是很理解的话认真看一遍代码,每一行都真正弄懂就会理解了。如果对BFS队列有

Moressette流沙的博客 1085
上一篇: poj 3261 Milk Patterns (后缀数组+二分)
下一篇: KMP算法浅析
Timeclimber
博客等级 码龄9年 25粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值