OpenJudge 迷宫问题 BFS

OpenJudge-NOI-1.5.31-开关灯 开关灯 阅读详情
描述
定义一个二维数组: 

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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线
输入
一个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
样例输出
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)

(4, 4)


寻找最短路径,因此用BFS比较好,由于该题需要最短路径所经过的点,故不能使用STL的队列,可以自己设一个一维数组,用头指针和尾指针进行维护。

在每个节点中,设一个指针指向前一个结点,再用栈即可输出。

#include <iostream>
#include <cstdio>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
bool v[10][10];
int a[10][10];
int top,rear;
struct node{
    int x;
    int y;
    int steps;
    int t;
};
node q[35];
stack<node> p;
void f(int a,int b)
{
    q[rear].x=a;
    q[rear].y=b;
    q[rear].steps=q[top].steps+1;
    q[rear].t=top;
    rear++;
    v[a][b]=true;
}
void bfs()
{
  while(top<rear){
    if(q[top].x==5&&q[top].y==5){
        while(q[top].t!=-1){
            p.push(q[top]);
            top=q[top].t;
        }
        printf("(0, 0)\n");
        while(!p.empty()){
            printf("(%d, %d)\n",p.top().x-1,p.top().y-1);
            p.pop();
        }
        return;
    }
    int i=q[top].x;
    int j=q[top].y;
    if(!a[i][j-1]&&!v[i][j-1]){
        f(i,j-1);
    }
    if(!a[i][j+1]&&!v[i][j+1]){
        f(i,j+1);
    }
    if(!a[i-1][j]&&!v[i-1][j]){
        f(i-1,j);
    }
    if(!a[i+1][j]&&!v[i+1][j]){
        f(i+1,j);
    }
    top++;
}
}
int main()
{
    for(int i=0;i<=6;i++){
        a[0][i]=a[6][i]=a[i][0]=a[i][6]=1;
    }
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            scanf("%d",&a[i][j]);
        }
    }
    top=rear=0;
    memset(v,false,sizeof(v));
    q[rear].x=1;
    q[rear].y=1;
    q[rear].steps=1;
    q[rear].t=-1;
    rear++;
    v[1][1]=true;
    bfs();
    return 0;
}



从《地牢大师》到算法实战:用C++ BFS解决三维迷宫问题(附OpenJudge题解) 本文详细介绍了如何用C++ BFS算法解决三维迷宫问题,从游戏《Dungeon Master》出发,逐步拆解三维空间的建模与搜索策略。通过OpenJudge题解和实战代码示例,帮助读者掌握三维BFS的核心实现技巧,包括状态表示、边界检查和输入处理,适用于信息学奥赛和算法竞赛的实战需求。 阅读详情

相关推荐

信息学奥赛迷宫寻路:从广搜模板到OpenJudge实战解析

本文深入解析信息学奥赛中迷宫寻路问题的广度优先搜索(BFS)算法,从基础模板到OpenJudge实战应用。通过对比BFS与DFS的效率差异,提供优化技巧和常见错误分析,帮助参赛者高效解决NOI等竞赛中的迷宫问题。

weixin_28738165的博客 391

笔试题:03年_迷宫

#include #include #include using namespace std; //请编写一个迷宫程序 //广度优先寻找最短时间走出迷宫。深度优先遍历解决:能否走出迷宫。 #define MAXSIZE 128 bool bMark[MAXSIZE][MAXSIZE]; //剪枝标记数组,true:表示已经访问过,false:表示没有访问过 int iArrMaz

qingyuanluofeng的专栏 697

信息学奥赛迷宫题别死磕DFS!用BFS(广搜)5分钟搞定最短路径,附OpenJudge 6264题解

本文探讨了信息学奥赛中迷宫题的高效解法,指出DFS在寻找最短路径时的局限性,并推荐使用BFS(广度优先搜索)算法。通过OpenJudge 6264题解实例,详细展示了BFS的实现框架和优化技巧,帮助选手在5分钟内解决最短路径问题,提升竞赛效率。

weixin_42524276的博客 202

数据结构与算法B代码编写作业,栈的基本操作,解题报告&AC代码

唔…这道题如果要强行用数组做也很简单…不过既然要小伙伴们练一练栈这货怎么用,那就老老实实地栈着吧…… 广告一枚…第一次尝试边边写代码…感觉还可以…… 回归正题,关于栈的定义,不外乎这些元素:数据存储空间,栈内元素标记以及操作函数。一个比较简明的定义如下面: template class myStack { public: myStack(int x);

堆放杂物 2194

POJ(7084)-----迷宫问题(openjudge)

迷宫问题 描述 定义一个二维数组: 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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

奇怪的小地方\(^o^)/~ 1038

Mathtype公式下标深度调整技巧:解决固定行距下的显示不全问题

本文针对在Word等文档中设置固定行距时,Mathtype公式下标显示不全的问题,提供了专业解决方案。核心在于调整Mathtype软件内部的“下标深度”参数,通过修改单个公式或批量格式化全文,使公式完美适配固定行距,确保下标清晰完整,且不影响文档整体排版。

pepsi的博客 1502

noi-openjudge使用

填写Email,用户名,密码点击注册。输入账号、密码 点击登录。点击登录进入登录页面。

ya888g 3481

亿佰特E77模块(STM32WLE5CCU6)LoRa通信实战指南:从配置到应用开发

本文详细介绍了亿佰特E77模块(STM32WLE5CCU6)的LoRa通信实战指南,从硬件配置到应用开发。基于ARM Cortex-M4内核的E77模块集成了LoRa射频前端,具备超低功耗和硬件级抗干扰特性,适用于智能农业、工业现场等场景。文章提供了开发环境搭建、LoRa参数配置、实战通信及性能优化等实用技巧,帮助开发者快速掌握LoRa通信技术。

weixin_29164185的博客 762

OpenJudge题解——1.4编程基础之逻辑表达式与条件分支

【代码】OpenJudge题解——1.4编程基础之逻辑表达式与条件分支。

Derry2012的博客 1615

VMware 15 虚拟机安装Ubuntu 18.04

这几年在自动化、计算机之间游来游去,最近又要做机器学习相关的课题,14年做的虚拟机实在不堪重用了,OK,我们重新开始。 VMware的安装就不再赘述了,目前最新版本是15.0.2,官方下载地址: https://my.vmware.com/en/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0...

略懂 2万+

TwinCAT3 实时核异步通信:基于ADS的C++ Server/Client数据交换实战解析

本文深入解析了在TwinCAT3实时核中,如何利用ADS协议实现C++ Server与Client之间的异步数据交换。文章从核心概念入手,详细阐述了实时核、ADS通信及异步机制,并通过实战步骤指导环境搭建、路由配置、Server端服务创建与Client端请求发起,重点剖析了Req/Ind/Res/Con异步回调模型,旨在帮助开发者构建高效、非阻塞的实时工业控制应用。

purple的博客 469

[走迷宫上瘾]关于迷宫问题与深搜的爱恨情仇

题解

Michael-Shao的博客 1387

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1451

电子学会 青少年软件编程 C语言(树&堆&图)等级考试7级-2022-3-02-迷宫问题

电子学会 青少年软件编程 C语言(树&堆&图)等级考试7级-2022-3-02-迷宫问题

青少年趣味编程 151

华为OD机试 新系统真题 【数字系统转换器】

华为OD机试 新系统真题【数字系统转换器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【数字系统转换器】多语言题解。

qq_45776114的博客 542

汽车UDS诊断详解及Vector相关工具链使用说明——1.1 应用层协议整体介绍

本文我们先从整体的维度来介绍一下应用层协议,每个UDS服务都遵循本文中的协议。 一、SI(Service ID) SI是UDS指令的第一个字节,我们第一篇文章中提到的10等服务就是指这个服务的SI=0x10,它是服务的标识,每个服务的SI都是唯一的。 ...

weixin_42967006的博客 5475

从《地牢大师》到算法实战:用C++ BFS解决三维迷宫问题(附OpenJudge/NOI真题解析)

本文详细解析了如何利用C++ BFS算法解决三维迷宫问题,以《地牢大师》为例,从二维到三维的思维跃迁、算法实现细节到实战技巧与优化策略。特别适合信息学竞赛(NOI)选手和算法爱好者,附OpenJudge真题解析,帮助读者深入理解三维空间中的搜索算法应用。

weixin_28731223的博客 173

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

【WRF-Chem 工具】CAMStoWRF详解:CAMS数据下载及处理

WW、forever的博客 195

从《地牢城主》到BFS实战:用C++解OpenJudge三维迷宫题(附完整代码)

本文详细解析了如何利用C++实现三维BFS算法解决OpenJudge上的《Dungeon Master》迷宫题。从三维坐标系的建立到BFS的核心实现,再到常见陷阱与调试技巧,提供了完整的代码示例和优化建议,帮助读者掌握三维迷宫问题的解决思路。

weixin_30420305的博客 235

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

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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

信息学奥赛一本通 1251:仙岛求药 | OpenJudge NOI 2.5 2727:仙岛求药

【题目链接】 ybt 1251:仙岛求药 OpenJudge NOI 2.5 2727:仙岛求药 【题目考点】 1. 广搜 迷宫问题 网格地图本质上是无权图,迷宫问题求一点到另一点最短路径的距离,本质上是求无权图中的最短路径的距离。 如可以用广搜的方法解决该问题,如果地图中有n个格子,广搜求解迷宫问题的复杂度为O(n)O(n)O(n) 【解题思路】 广搜,迷宫问题模板题。 当数据量很小时,用深搜的方法遍历所有可能的路径,找其中可以到达终点的最短路径,理论上也是可行的,只是复杂度很高。如果地图中有n个格子,深

君义NOIP的博客 3331

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

别再死磕深搜了!用C++队列搞定迷宫最短路径,信息学奥赛OpenJudge真题保姆级解析

本文详细解析了如何使用C++队列实现广度优先搜索(BFS)解决迷宫最短路径问题,特别针对信息学奥赛和OpenJudge真题。通过对比DFS的局限性,展示了BFS在时间和空间复杂度上的优势,并提供了完整的代码实现和调试技巧,帮助竞赛选手高效应对迷宫类题目。

weixin_30740295的博客 253

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

POJ - 3984 迷宫问题 (BFS+DFS)

定义一个二维数组: 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

AK_HuangYC的博客 381

OpenJudge 迷宫问题

(我是一名普通的本科生,我会将我在编程做题时遇到的题目分享上来,这是我的第一篇文章,希望在此之后我的文章可以伴随大家一起成长。) 总时间限制: 1000ms 内存限制: 65536kB 描述 定义一个二维数组: 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表示可以走的路,只能横着走...

qq_51767234的博客 704

【openjudge】迷宫

描述 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。 输入

zyf2000 2322

【openjudge】走迷宫

描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。 输入 第一行是两个整数,R和C,代表迷宫的长和宽。( 1 接下来是R行,每行C个字符,代表整个迷宫。 空地格子用'.'表示,有障碍物的格子用'#'表示。 迷宫左上角和右下角都是'

zyf2000 3499

OpenJudge7084迷宫问题

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。在样例输出中,逗号后面有个空格,emmm…鬼知道我找了多久bug。一个5 × 5的二维数组,表示一个迷宫。左上角到右下角的最短路径,格式如样例所示。

weixin_52171700的博客 504
上一篇: POJ3278 Catch That Cow BFS入门
下一篇: Poj3264 Balanced Lineup 线段树基础题
Megumin
博客等级 码龄10年 3粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值