题目描述
学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。
输入
第一行两个整数n, m,为迷宫的长宽。
接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。数据保证(1,1),(n,m)可以通过。
输出
第一行一个数为需要的最少步数K。
第二行K个字符,每个字符∈{U,D,L,R},分别表示上下左右。如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。
样例输入
3 3
001
100
110
样例输出
4
RDRD
提示
有20%的数据满足:1<=n,m<=10

有50%的数据满足:1<=n,m<=50

有100%的数据满足:1<=n,m<=500
思路:其实单纯的bfs就可以了,这个题目跟19年省赛填空压轴题一样。当时一哥们说,怕用bfs会内存超限。因此我试了试dfs。bfs找出最短路径之后,记录下来路径。然后dfs再回去找路径。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=5e2+10;
struct node{int x,y;node(int a,int b){x=a,y=b;}
};
int d[][2]={{1,0},{0,-1},{0,1},{-1,0}};
char rr[]={'D','L','R','U'};
char b[maxx][maxx];
int pre[maxx][maxx];
int vis[maxx][maxx];
int n,m;inline void bfs(int x,int y)
{queue<node> q;q.push(node(x,y));vis[x][y]=1;while(q.size()){node a=q.front();q.pop();if(a.x==n&&a.y==m) break;for(int i=0;i<4;i++){int tx=a.x+d[i][0];int ty=a.y+d[i][1];if(tx<1||tx>n||ty<1||ty>m||b[tx][ty]=='1'||vis[tx][ty]) continue;vis[tx][ty]=1;pre[tx][ty]=i;q.push(node(tx,ty));}}
}
inline void dfs(int x,int y,string &s)
{if(x==1&&y==1) return ;s=rr[pre[x][y]]+s;int tx=x-d[pre[x][y]][0];int ty=y-d[pre[x][y]][1];dfs(tx,ty,s);
}
int main()
{scanf("%d%d",&n,&m);getchar();for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) scanf("%c",&b[i][j]);getchar();}bfs(1,1);string s="";dfs(n,m,s);cout<<s.length()<<endl<<s<<endl;return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][算法提高VIP]学霸的迷宫(bfs+dfs)相关推荐

  1. c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  2. [蓝桥杯][算法提高VIP]开灯游戏(dfs)

    题目描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). 具体如下: 第一个开关控制第二,第四盏灯: 第二个开关控制第一, ...

  3. [蓝桥杯][算法提高VIP]夺宝奇兵-递推+记忆化搜索

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  4. [蓝桥杯][算法提高VIP]夺宝奇兵-dp

    题目描述 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 " ...

  5. [蓝桥杯][算法提高VIP]阮小二买彩票

    [蓝桥杯][算法提高VIP]阮小二买彩票 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多.可是一段时间观察下 ...

  6. [蓝桥杯][算法提高VIP]阮小二买彩票[递归全排列]

    题目 1578: [蓝桥杯][算法提高VIP]阮小二买彩票 时间限制: 1Sec 内存限制: 128MB 提交: 348 解决: 153 题目描述 在同学们的帮助下,阮小二是变的越来越懒了, 连算账都 ...

  7. [蓝桥杯][算法提高][vip] 阮小二买彩票

    蓝桥杯 ADV-66 算法提高 阮小二买彩票 问题描述 在同学们的帮助下,阮小二是变的越来越懒了,连算账都不愿意自己亲自动手了,每天的工作就是坐在电脑前看自己的银行账户的钱是否有变多.可是一段时间观察 ...

  8. [蓝桥杯][算法提高VIP]合并石子(区间dp+平行四边形优化)

    题目描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子合并成一堆的最小花费. 输入 输入第一行包含一个整数 ...

  9. 摩尔斯电码的c语言程序,[蓝桥杯][算法提高VIP]摩尔斯电码 (C语言代码)

    解题思路: 录入,分段,比较 注意事项: 不要去关注最后的几句话,完全误导人,我用getchar()结合EOF做得出来,但是提交总是报错,蓝桥杯官网和C语言网都一样. 参考代码:#include #i ...

最新文章

  1. 图像处理和图像识别中常用的matlab函数
  2. 关于开源堡垒机Jumpserver二次开发
  3. 【数据结构-学习路线】博文导航与思维导图(计算机考研+期末考试===> 一步到位)
  4. CRM Fiori页面返回的元数据解析
  5. adc0832对光电二极管进行数据采集_一种基于光电二极管的麦克风跟踪检测电路的制作方法...
  6. mysql删除员工_数据库删除职工信息
  7. 手动挡五个档位示意图_★手动挡汽车档位图解
  8. python基础(set)补充
  9. 【问答系统】QA问答系统(Question Answering)
  10. kettle在linux定时任务_linux环境下kettle部署(JDK安装配置,kettle安装配置,资源库配置,定时执行job)...
  11. 今日头条android+x86,GitHub - teajoyus/TouTiao: 今日头条 For Android
  12. 远程服务器键盘变成快捷键?
  13. OSChina 周四乱弹 ——小小编辑教你装逼斗气
  14. 手工创建Oracle11g完整版(超详细)
  15. 带有下标的赋值维度不匹配。
  16. 7-12 个位数字统计 (15 分)
  17. 第17天 命令行窗口
  18. Redis高并发点赞
  19. 闲聊HTTP/2.0
  20. 俊哥的HADOOP之路

热门文章

  1. Python—实训day12—汽车用户消费投诉案例-分析及可视化
  2. java 第十一章总结
  3. IOS开发基础之UI基础的团购源码完整版本
  4. C语言之连接Mysql数据篇
  5. python PIL 打开\显示\保存图像
  6. java商品新增怎麽弄_添加新商品时如何初始化计数器 - java
  7. 网众linux安装教程,网众Linux搭建Samba教程
  8. Android开发中EditText获得焦点弹出输入框改变屏幕布局的问题
  9. 摔跤视频软件测试,Apple Watch 4摔倒检测立功:成功救人一命,网友:马上入手!...
  10. 关于bufferKnife8.8.1点击事件无效的原因