问题描述
下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可
以通行的地方。
010000
000100
001001
110000
迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这
个它的上、下、左、右四个方向之一。
对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,
一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。
对于下面这个更复杂的迷宫(30 行 50 列) ,请找出一种通过迷宫的方式,
其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。
请注意在字典序中D<L<R<U。(如果你把以下文字复制到文本文件中,请务
必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 maze.txt,
内容与下面的文本相同)
01010101001011001001010110010110100100001000101010
00001000100000101010010000100000001001100110100101
01111011010010001000001101001011100011000000010000
01000000001010100011010000101000001010101011001011
00011111000000101000010010100010100000101100000000
11001000110101000010101100011010011010101011110111
00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010
00111000001010100001100010000001000101001100001001
11000110100001110010001001010101010101010001101000
00010000100100000101001010101110100010101010000101
11100100101001001000010000010101010100100100010100
00000010000000101011001111010001100000101010100011
10101010011100001000011000010110011110110100001000
10101010100001101010100101000010100000111011101001
10000000101100010000101100101101001011100000000100
10101001000000010100100001000100000100011110101001
00101001010101101001010100011010101101110000110101
11001010000100001100000010100101000001000111000010
00001000110000110101101000000100101001001000011101
10100101000101000000001110110010110101101010100001
00101000010000110101010000100010001001000100010101
10100001000110010001000010101001010101011111010010
00000100101000000110010100101001000001000000000010
11010000001001110111001001000011101001011011101000
00000110100010001000100000001000011101000000110011
10101000101000100010001111100010101001010000001000
10000010100101001010110000000100101010001011101000
00111100001000010000000110111000000001000000001011
10000001100111010111010001000110111010101101111000
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个字符串,包含四种字母 D、U、L、R,在提交答案时只填写这个字符串,填
写多余的内容将无法得分。


解题思路

若求最优解或路径,用广搜。

原因:BFS得到的解总是最优解。

总结:如果迷宫很大或求最优解,则广搜。 如果求路径,则广搜

什么时候用深搜呢? 深搜比较好写, 如果求小迷宫,用深搜好一点。


代码展示

#include<cstdio>
#include<iostream>
using namespace std;struct note {int x;     //横坐标int y;         //纵坐标int f;     //父亲在队列中的编号,本题不要求输出路径,可以不需要fint s;        //步数
};int main() {struct note que[2501];    //地图大小不超过50*50 int a[51][51] = {0}, vis[51][51]={0};//定义一个用于表示走的方向的数组int next[4][2]={{0, 1},     //向右走{1, 0},        //向下走{0, -1},   //向左走 {-1, 0} };    //向上走int head, tail;int n, m, startx, starty, p, q, flag;cin>>n>>m;for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin>>a[i][j];cin>>startx>>starty>>p>>q;//队列初始化head = 1; tail = 1;//往队列插入迷宫入口坐标que[tail].x = startx;que[tail].y = starty;que[tail].f = 0;que[tail].s = 0;tail++;vis[startx][starty] = 1; flag = 0;  //用来标记是否到达目标点,0表示暂时还没有到达,1表示到达//当队列不为空时循环while(head < tail) {//枚举四个方向for(int k = 0; k <=3; k++)  {//计算下一个点的坐标 int tx = que[head].x + next[k][0];int ty = que[head].y + next[k][1];//判断是否越界、是否是障碍物和是否已经在路径中 //1、判断是否越界if(tx < 1 || tx > n || ty < 1 || ty > m) continue;//2&3、判断是否是障碍物或已经在路径中if(a[tx][ty]==0 && vis[tx][ty]==0) {//把这个点标记为已经走过//注意宽搜每个点只入队一次,所以和深搜不同,不需要建book数组还原vis[tx][ty] = 1;//插入新的点到队列中que[tail].x = tx;que[tail].y = ty;que[tail].f = head;  //求路径que[tail].s = que[head].s + 1;   //步数是父亲的步数+1 tail++;} //如果到目标点,停止扩展,任务结束,退出循环if(tx==p && ty==q) { flag=1; break; }}if(flag ==1) break;head++;      //当一个点扩展结束后,head++对后面的点进行扩展 } //打印队列中末尾最后一个点(目标点)的步数//注意tail是指向队列队尾(即最后一位)的下一个位置,所以这需要-1cout << que[tail-1].s; return 0;
}

【解题报告+感想感言】2019年第十届蓝桥杯【C++省赛B组】【第五题:迷宫】相关推荐

  1. 蓝桥杯java 大纲,2019 第十届蓝桥杯Java省赛B组个人总结

    前言 19年的这场蓝桥杯,对我自己的打击挺大的,以至于时隔多个月之后第十一届蓝桥杯要开始报名的时候,我才敢面对他.报名第十届蓝桥杯的时候我大二,自我感觉学的不错,但事实并非如此,当入了那句话,学术不精 ...

  2. 第十二届蓝桥杯 Java 省赛 B 组部分真题解析

    第一题:Char(送分题) char类型以ASCAII值存储,1-9(48~57).A~Z(65~90).a-z(97~122) 第二题:卡牌(送分题,一个顺序循环就可以出来了) package Te ...

  3. 2019年第十届蓝桥杯决赛(国赛) C++大学A组 D题 序列求和【全网找不到的题解?】

    题面 试题 D: 序列求和 本题总分:10 分 [问题描述] 学习了约数后,小明对于约数很好奇,他发现,给定一个正整数 t,总是可以找到含有 t 个约数的整数.小明对于含有 t 个约数的最小数非常感兴 ...

  4. 蓝桥杯java提交格式_2019第十届蓝桥杯JAVA省赛B组

    B 不同子串 题目描述 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串.例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 ...

  5. 南林蓝桥杯计算机大赛,我院计算机系在2019年第十届蓝桥杯大赛(省赛)中获得5项一等奖...

    我院计算机系在2019年第十届蓝桥杯大赛(省赛)中获得5项一等奖 在刚刚结束的2019年第十届蓝桥杯全国软件和信息技术专业人才大赛(省赛)中,我院计算机系获得了5项一等奖. 软件和信息技术产业作为我国 ...

  6. 2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人

    2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人 Ideas 首先我们根据数学常识可以知道,当每个机器人清扫的范围差不多时,最好都是 N / K,花的时间应该是最少的. ...

  7. 2019年第十届蓝桥杯[Java]

    2019年第十届蓝桥杯[Java] 特别数的和 [题目描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1.2.9.10 至 32.39 和 ...

  8. 第十届蓝桥杯大赛软件赛省赛——Java大学A组

    第十届蓝桥杯大赛软件赛省赛--Java大学A组 试题A:平方和 public class TestA {static boolean has2019(int number) {String strin ...

  9. 2019第十届蓝桥杯大赛省赛感想——仅以此祭奠我的大学算法竞赛

    2019年已经大三的我,第二次踏上了"蓝桥"省赛之旅,这应该是我大学生涯最后一次参加程序算法类竞赛了,心情还是比较平静.第二次的参赛感受还是蛮多的,没有了第一次对这项赛事的新鲜感和 ...

  10. 第十届蓝桥杯单片机国赛代码实现

    代码如下: #include <STC15F2K60S2.H> #include "iic.h" #include "onewire.h" #inc ...

最新文章

  1. MongoDB 分页查询的方法及性能
  2. 配置化的版本更新引导怎么做?
  3. 微信摇一摇插件ios_微信开发平台 Jeewx-Boot
  4. Android 跨进程通信: AIDL
  5. 2018-2019 网络对抗技术 20165231 Exp5 MSF基础应用
  6. Python接口自动化之logging封装及实战
  7. 解决virtualbox 虚拟机不能ping通win7
  8. cad图纸怎么看懂_教你看懂CAD图纸
  9. linux 内核 addr2line,內核調試 arm-none-linux-gnueabi-addr2line 工具使用
  10. 应对风险和机会的措施讲解
  11. 酒店简易管理系统制作详细过程
  12. AI技术押人工智能考试题
  13. sql server编程之 T-SQL函数
  14. [第五章] 深入理解计算机系统第三版 家庭作业参考答案
  15. Go语言环境安装与试运行
  16. 定期存款可以提前取出来吗_存的定期可以提前取吗
  17. 【08月02日】A股滚动市盈率PE历史新低排名
  18. 云产品--游戏加速云产品(已过期)
  19. 文库自由复制(纯文本)
  20. 太原火车站附近的宾馆

热门文章

  1. 打造杰出软件开发团队的12条指导建议
  2. WebRTC的现状和未来:专访W3C WebRTC Chair Bernard Aboba(下)
  3. AWS Elemental推出新一代基于云的直播视频服务
  4. 「递归」第7集 | 腾讯开源联盟出征!
  5. 开源系统管理资源大合辑
  6. c/c++操作mysql数据库使用utf8总结
  7. leetcode 395. Longest Substring with At Least K Repeating Characters| 395. 至少有 K 个重复字符的最长子串(分治法)
  8. leetcode 983. Minimum Cost For Tickets | 983. 最低票价(动态规划)
  9. SQL 中 left join、right join、inner join 的区别
  10. 【MySQL】触发器:让指定某一字段的值等于id