1. 试题 E: 迷宫
  2. 本题总分:
  3. 【问题描述】
  4. 下图给出了一个迷宫的平面图,其中标记为 的为障碍,标记为 的为可
  5. 以通行的地方。
  6.  
  7. 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这
  8. 个它的上、下、左、右四个方向之一。
  9. 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,
  10. 一共 步。其中 DULR 分别表示向下、向上、向左、向右走。
  11. 对于下面这个更复杂的迷宫( 列) ,请找出一种通过迷宫的方式,
  12. 其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。
  13. 请注意在字典序中D<L<R<U。(如果你把以下文字复制到文本文件中,请务
  14. 必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 maze.txt
  15. 内容与下面的文本相同)
  16.  
  17. 【答案提交】
  18. 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
  19. 个字符串,包含四种字母 DULR,在提交答案时只填写这个字符串,填
  20. 写多余的内容将无法得分。

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. const int N =;
  7. int n,m;
  8. char s[N][N];
  9. bool vis[N][N];
  10. struct Node{
  11. int x,y,step;
  12. int dir[];
  13. };
  14. int di[][]={{,},{,-},{,},{-,}};//DLRU的优先级,因此最后
  15. //输出的结果就是字典序最小的
  16. bool check(int x,int y)
  17. {
  18. if(x>=&&x<n&&y>=&&y<m&&s[x][y]==''&&!vis[x][y])
  19. return ;
  20. return ;
  21. }
  22. void bfs()
  23. {
  24. Node now,next;
  25. queue<Node>q;
  26. now.x=,now.y=,now.step=,now.dir[]=-;
  27. q.push(now);
  28. vis[][]=;
  29. while(!q.empty()){
  30. now = q.front();q.pop();
  31. if(now.x==n-&&now.y==m-){
  32. printf("%d\n",now.step);
  33. for(int i=;i<=now.step;i++){
  34. if(now.dir[i]==) printf("D");
  35. else if(now.dir[i]==) printf("L");
  36. else if(now.dir[i]==) printf("R");
  37. else if(now.dir[i]==) printf("U");
  38. }
  39. break;
  40. }
  41. for(int i =;i<;i++){//DLRU
  42. int x = now.x+di[i][];
  43. int y = now.y+di[i][];
  44. if(check(x,y)){
  45. vis[x][y] =;
  46. next = now;//保证now指向的连续,便于输出这条路径
  47. next.x=x;
  48. next.y=y;
  49. next.step=now.step+;
  50. next.dir[next.step]=i;//next始终不变
  51. q.push(next);
  52. }
  53. }
  54. }
  55. }
  56. int main()
  57. {
  58. freopen("1.txt","r",stdin);
  59. scanf("%d%d",&n,&m);
  60. for(int i =;i<n;i++) scanf("%s",s[i]);
  61. memset(vis,,sizeof(vis));
  62. bfs();
  63. return ;
  64. }

2019年第十届蓝桥杯C/C++程序设计本科B组省赛 E迷宫的更多相关文章

  1. 2016年第七届蓝桥杯C/C++程序设计本科B组省赛

    /* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...

  2. 2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈

    2012年第三届蓝桥杯C/C++程序设计本科B组省赛 取球博弈 题目描述 **取球博弈 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并 ...

  3. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛

    1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C.为了促销,每件商品都会返固定 ...

  4. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 ——居民集会(编程大题)

    标题:居民集会 蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的 位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距 离为di.每年,蓝桥村都要举行一次集会.今年,由于村里的 ...

  5. 第七届蓝桥杯C/C++程序设计本科B组决赛 ——凑平方数(填空题)

    凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的.比如:0, 36, 5948721 再比如:10985247361, 25, 63907840, 4, 289, 1 ...

  6. 2016年第七届蓝桥杯C/C++程序设计本科B组决赛

    2.答案300 刁丝卫代码,比赛时long long写成int,结果成了263...一等擦肩而过... #include <iostream> #include <fstream&g ...

  7. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 完美正方形

    完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形.历史上,人们花了很久才找到了若干完美正方形.比如:如下边长的22个正方形 2 3 4 6 7 8 12 13 ...

  8. 第七届蓝桥杯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 只 ...

  9. 第七届蓝桥杯C/C++程序设计本科B组决赛 ——棋子换位(代码补全题)

    棋子换位 有n个棋子A,n个棋子B,在棋盘上排成一行.它们中间隔着一个空位,用“.”表示,比如: AAA.BBB 现在需要所有的A棋子和B棋子交换位置.移动棋子的规则是:1. A棋子只能往右边移动,B ...

随机推荐

  1. Spring中<context:annotation-config/>的作用

    spring中<context:annotation-config/>配置的作用,现记录如下: <context:annotation-config/>的作用是向Spring容 ...

  2. March 31 2017 Week 13 Friday

    Sometimes, you think the sky is falling down, actually, that is just because you stand slanting. 有时候 ...

  3. JavaMail简单应用

    版权声明:本文为博主原创文章,未经博主同意不得转载. --caicongyang https://blog.csdn.net/caicongyang/article/details/33731395 ...

  4. Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程 - 非HA方式 (一台server)

    原帖地址: http://blog.csdn.net/nsrainbow/article/details/36629741 接上一个教程:http://blog.csdn.net/nsrainbow/ ...

  5. 生理周期,POJ(1006)

    题目链接:http://poj.org/problem?id=1006 解题报告: 1.枚举天数的时候可以根据前面的结果直接跳过一些错误的答案. ///三个周期是23,28,33, #include ...

  6. SignalR中的依赖注入

    什么是依赖注入? 如果你已经熟悉依赖注入可以跳过此节. 依赖注入 (DI) 模式下,对象并不为自身的依赖负责. 下边的例子是一个主动 DI. 假设你有个对象需要消息日志.你可能定义了一个日志接口: C ...

  7. HDU 1045 Fire Net(dfs,跟8皇后问题很相似)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1045 Fire Net Time Limit: 2000/1000 MS (Java/Others)   ...

  8. 64 位系统(win7/win8) 下使用C# 程序问题

    1  C# 程序是控制台类,使用的组件如果是32位,建议在编译的时候,platform (X86,AnyCPU,X64)选择X86 .使用X86 模式编译,才能调用32位程序的API. 2  ASP. ...

  9. 关于改变placeholder的颜色

    input::-webkit-input-placeholder{ color:red; } input::-moz-placeholder{ /* Mozilla Firefox 19+ */ co ...

  10. python中and,or

    在很多逻辑语句中,常常会出现and,or这两个逻辑运算符. 下面直接上代码 print(0 or None) #None ''' or比较运算符: 当or旁两边都是真的话,那么会取第一个值 当or两边 ...