迷宫问题的最短路,加最小字典序

迷宫文件maze.txt传送门
作者写的2019年B组蓝桥杯解集
.
.
.

DFS的版本

#include<iostream>
#include<cstring>
using namespace std;
const int ax[4]={0,0,1,-1};
const int ay[4]={1,-1,0,0};
const char dir[5]={'R','L','D','U'};
int maze[60][60],mins[60][60];
char a[2000];
int best;
string ans;
bool judge(int x,int y) {//判断这个点是否越界,是否走过。if(x>0&&x<=30&&y>0&&y<=50&&!maze[x][y])return true;return false;
}
void dfs(int x,int y,int pos) {if(pos>best)return ;if(x==30&&y==50) {string temp;for(int i=1;i<pos;i++)temp+=a[i];if(pos<best) {//是最短的路ans=temp;best=pos;}else if(pos==best&&temp<ans) ans=temp;//在实现路时最短的同时,保证字典序最小。return ;}for(int i=0;i<4;i++) {int tempx=x+ax[i];int tempy=y+ay[i];if(judge(tempx,tempy)&&pos+1<=mins[tempx][tempy]) {maze[tempx][tempy]=1;mins[tempx][tempy]=pos+1;a[pos]=dir[i];dfs(tempx,tempy,pos+1);maze[tempx][tempy]=0;//回溯找短的路,或者时字典序最小的。}}
}
int main()
{freopen("D:\\MY\\ce.txt","r",stdin);memset(mins,1,sizeof(mins));best=1<<28;for(int i=1;i<=30;i++)for(int j=1;j<=50;j++) {char t;cin>>t;maze[i][j]=t-'0'; }maze[1][1]=1;dfs(1,1,1);cout<<ans<<endl;return 0;
}

其中最重要的就是数组mins,这里记录了从起始位置到这里的最短步数,
l
l当这个点在可以到达终点的路径上时,也有可能有多种方式到这个点,所以一点更要保证时最小的步数到可以到达终点的路径上的点。

.
.
.
BFS版本

#include<iostream>
#include<cstring>
#include<queue>
const int ax[4]={1,0,0,-1};
const int ay[4]={0,-1,1,0};
const char dir[5]={'D','L','R','U'};
int maze[40][60];
using namespace std;
struct point {int x,y;string ans;point(int a,int b,string c):x(a),y(b),ans(c){}
};
bool judge(int x,int y) {if(x>0&&x<=30&&y>0&&y<=50&&!maze[x][y])return true;return false;
}
void bfs() {queue<point>ans;ans.push(point(1,1,""));maze[1][1]=1;while(!ans.empty()) {point temp=ans.front();ans.pop();if(temp.x==30&&temp.y==50) {cout<<temp.ans<<endl;return ;}for(int i=0;i<4;i++) {int tempx=temp.x+ax[i];int tempy=temp.y+ay[i];if(judge(tempx,tempy)) {maze[tempx][tempy]=1;ans.push(point(tempx,tempy,temp.ans+dir[i]));}}}
}
int main() {freopen("D:\\MY\\ce.txt","r",stdin);for(int i=1;i<=30;i++)for(int j=1;j<=50;j++) {char t;cin>>t;maze[i][j]=t-'0'; }bfs();return 0;
}

这里就不用考虑回溯的问题,不用考虑是不是最短路的问题,但是可能有一个是不是字典序最小需要考虑,
.
于是我把这里的dir方向数组设置成了"D L R U"的顺序,保证了在步数最小的前提下最小字典序一定会最早出现。

DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR
*
**
**
*


还有一点要注意的就是,我这里 用的是int数组存地图,地图之间没有空格,一定要先用char读取,或者直接用char数组表示地图。
.
就因为这个,我抑郁了好久,一直不知道哪里错了。

[蓝桥杯2019初赛]迷宫-DFS、BFS两种方法相关推荐

  1. 蓝桥杯题目练习 提升篇 [蓝桥杯2019初赛]迷宫

    [蓝桥杯2019初赛]迷宫 题目描述 下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左上角, ...

  2. [蓝桥杯2019初赛]迷宫-bfs+存储路径

    题目描述 下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能 ...

  3. [蓝桥杯2018初赛]全球变暖-dfs,bfs,连通块

    解题思路: bfs:遍历所有未遍历过的陆地,通过bfs计算出当前位置连通陆地的数量cnt,以及被淹没陆地的数量bound,若cnt == bound表示完整淹没的一个岛屿 dfs:将连通块全部标记,如 ...

  4. 蓝桥杯2017初赛-迷宫-dfs

    题目描述 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间,R表示走到右边 ...

  5. 蓝桥杯2019初赛 外卖店优先级 java

    蓝桥杯2019初赛 外卖店优先级 因为疫情的原因,4月份的蓝桥杯推迟到了现在,其实一直以来也没有准备这个比赛,只有一两天时间了,刷几道真题抱一下佛脚. 下面开始说正事: 这道题如果思路不对的话,可能做 ...

  6. [蓝桥杯2019初赛]立方和

    [蓝桥杯2019初赛]立方和 无脑暴力 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll fast ...

  7. java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)

    这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔者综合了各路大神神乎其技的思想,总结出 ...

  8. 蓝桥杯2015初赛生命之树 DFS图解

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 蓝桥杯2015初赛生命之树

  9. SketchUp 2019 文件导入AI的两种方法(附插件)

    作者:TutorialsUp 今天与大家分享TutorialsUp教程 将SketchUp文件导入AI的两种方法 作者通过两种方式,完美地将SU文件导入AI进行编辑. 第一种方法是SketchUp原生 ...

最新文章

  1. (Python)石头剪刀布游戏
  2. 死磕Java并发:J.U.C之AQS同步状态的获取与释放
  3. mysql从innodb转到MyIsam的count查询效率极大提升
  4. [数据结构]顺序单链表插入
  5. html 缩小页面 重叠,如何获得两个平行四边形完美重叠并在HTML中动态调整大小?...
  6. 网信办:2021年全国受理网络违法和不良信息举报1.66亿件
  7. 嵌入式linux寄存器位运算,嵌入式linux C语言(一)――位运算的使用
  8. 某听书网站系统漏洞,利用抓包拼接方式获取网站资源
  9. 音视频处理之FFmpeg封装格式20180510
  10. LeetCode160相交链表
  11. 【图像重建】基于matlab卷积神经网络的图像超分辨率重建【含Matlab源码 1816期】
  12. PHP mysql_connect() 函数
  13. JEP:Java表达式分析器
  14. 黑马微服务项目乐优商城全套
  15. rar压缩包解密在线,忘记rar压缩包密码怎么找回?
  16. 计算机文件自定义排序6,文件夹如何自定义排序
  17. 《裸辞后,降薪找工作》
  18. Win10优化:系统文件Hiberfil.sys介绍
  19. 求生之路 自定义服务器,求生之路2·教你如何自定义绑定快捷键
  20. QT 访问sqlite数据库

热门文章

  1. scrapy爬取动态网页_scrapy_splash 设置随机请求头
  2. 柠檬汁制成的电池可以开动超100千克的车子吗?
  3. 这个地球仪太惊艳了,陪孩子畅聊天文地理。
  4. php生成vcf,详解PHP如何实现生成vcf vcard文件
  5. python 什么是原类_Python 什么是元类(metaclasses)?
  6. oracle的排序分页,oracle 排序分页 高效sql语句
  7. 构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...
  8. kivy中文手册python_K-Meleon
  9. hash算法_到底什么是Hash?Hash算法的原理和实际应用讲解
  10. centos 新装mysql 进入,centos5安装 mysql 提示需要用户及密码进入?Duplicate entry 'localhost-' for key 1...