2019年第十届蓝桥杯C/C++程序设计本科B组省赛 E迷宫
- 试题 E: 迷宫
- 本题总分: 分
- 【问题描述】
- 下图给出了一个迷宫的平面图,其中标记为 的为障碍,标记为 的为可
- 以通行的地方。
- 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这
- 个它的上、下、左、右四个方向之一。
- 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,
- 一共 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。
- 对于下面这个更复杂的迷宫( 行 列) ,请找出一种通过迷宫的方式,
- 其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。
- 请注意在字典序中D<L<R<U。(如果你把以下文字复制到文本文件中,请务
- 必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 maze.txt,
- 内容与下面的文本相同)
- 【答案提交】
- 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
- 个字符串,包含四种字母 D、U、L、R,在提交答案时只填写这个字符串,填
- 写多余的内容将无法得分。
- #include <iostream>
- #include<cstdio>
- #include<cstring>
- #include<queue>
- using namespace std;
- const int N =;
- int n,m;
- char s[N][N];
- bool vis[N][N];
- struct Node{
- int x,y,step;
- int dir[];
- };
- int di[][]={{,},{,-},{,},{-,}};//DLRU的优先级,因此最后
- //输出的结果就是字典序最小的
- bool check(int x,int y)
- {
- if(x>=&&x<n&&y>=&&y<m&&s[x][y]==''&&!vis[x][y])
- return ;
- return ;
- }
- void bfs()
- {
- Node now,next;
- queue<Node>q;
- now.x=,now.y=,now.step=,now.dir[]=-;
- q.push(now);
- vis[][]=;
- while(!q.empty()){
- now = q.front();q.pop();
- if(now.x==n-&&now.y==m-){
- printf("%d\n",now.step);
- for(int i=;i<=now.step;i++){
- if(now.dir[i]==) printf("D");
- else if(now.dir[i]==) printf("L");
- else if(now.dir[i]==) printf("R");
- else if(now.dir[i]==) printf("U");
- }
- break;
- }
- for(int i =;i<;i++){//DLRU
- int x = now.x+di[i][];
- int y = now.y+di[i][];
- if(check(x,y)){
- vis[x][y] =;
- next = now;//保证now指向的连续,便于输出这条路径
- next.x=x;
- next.y=y;
- next.step=now.step+;
- next.dir[next.step]=i;//next始终不变
- q.push(next);
- }
- }
- }
- }
- int main()
- {
- freopen("1.txt","r",stdin);
- scanf("%d%d",&n,&m);
- for(int i =;i<n;i++) scanf("%s",s[i]);
- memset(vis,,sizeof(vis));
- bfs();
- return ;
- }
2019年第十届蓝桥杯C/C++程序设计本科B组省赛 E迷宫的更多相关文章
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛
/* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...
- 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈
2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈 题目描述 **取球博弈 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛
1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C.为了促销,每件商品都会返固定 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 ——居民集会(编程大题)
标题:居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的 位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距 离为di.每年,蓝桥村都要举行一次集会.今年,由于村里的 ...
- 第七届蓝桥杯C/C++程序设计本科B组决赛 ——凑平方数(填空题)
凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的.比如:0, 36, 5948721 再比如:10985247361, 25, 63907840, 4, 289, 1 ...
- 2016年第七届蓝桥杯C/C++程序设计本科B组决赛
2.答案300 刁丝卫代码,比赛时long long写成int,结果成了263...一等擦肩而过... #include <iostream> #include <fstream&g ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 完美正方形
完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形.历史上,人们花了很久才找到了若干完美正方形.比如:如下边长的22个正方形 2 3 4 6 7 8 12 13 ...
- 第七届蓝桥杯C/C++程序设计本科B组决赛 ——机器人塔(程序大题)
机器人塔 X星球的机器人表演拉拉队有两种服装,A和B.他们这次表演的是搭机器人塔. 类似: A B B A B A A A B B B B B A BA B A B B A 队内的组塔规则是: A 只 ...
- 第七届蓝桥杯C/C++程序设计本科B组决赛 ——棋子换位(代码补全题)
棋子换位 有n个棋子A,n个棋子B,在棋盘上排成一行.它们中间隔着一个空位,用“.”表示,比如: AAA.BBB 现在需要所有的A棋子和B棋子交换位置.移动棋子的规则是:1. A棋子只能往右边移动,B ...
随机推荐
- Spring中<context:annotation-config/>的作用
spring中<context:annotation-config/>配置的作用,现记录如下: <context:annotation-config/>的作用是向Spring容 ...
- March 31 2017 Week 13 Friday
Sometimes, you think the sky is falling down, actually, that is just because you stand slanting. 有时候 ...
- JavaMail简单应用
版权声明:本文为博主原创文章,未经博主同意不得转载. --caicongyang https://blog.csdn.net/caicongyang/article/details/33731395 ...
- Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程 - 非HA方式 (一台server)
原帖地址: http://blog.csdn.net/nsrainbow/article/details/36629741 接上一个教程:http://blog.csdn.net/nsrainbow/ ...
- 生理周期,POJ(1006)
题目链接:http://poj.org/problem?id=1006 解题报告: 1.枚举天数的时候可以根据前面的结果直接跳过一些错误的答案. ///三个周期是23,28,33, #include ...
- SignalR中的依赖注入
什么是依赖注入? 如果你已经熟悉依赖注入可以跳过此节. 依赖注入 (DI) 模式下,对象并不为自身的依赖负责. 下边的例子是一个主动 DI. 假设你有个对象需要消息日志.你可能定义了一个日志接口: C ...
- HDU 1045 Fire Net(dfs,跟8皇后问题很相似)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others) ...
- 64 位系统(win7/win8) 下使用C# 程序问题
1 C# 程序是控制台类,使用的组件如果是32位,建议在编译的时候,platform (X86,AnyCPU,X64)选择X86 .使用X86 模式编译,才能调用32位程序的API. 2 ASP. ...
- 关于改变placeholder的颜色
input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...
- python中and,or
在很多逻辑语句中,常常会出现and,or这两个逻辑运算符. 下面直接上代码 print(0 or None) #None ''' or比较运算符: 当or旁两边都是真的话,那么会取第一个值 当or两边 ...