蓝桥杯 ADV-147 算法提高 学霸的迷宫
问题描述
学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。
输入格式
第一行两个整数n, m,为迷宫的长宽。
接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。数据保证(1,1),(n,m)可以通过。
输出格式
第一行一个数为需要的最少步数K。
第二行K个字符,每个字符∈{U,D,L,R},分别表示上下左右。如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。
样例输入
Input Sample 1:
3 3
001
100
110
Input Sample 2:
3 3
000
000
000
样例输出
Output Sample 1:
4
RDRD
Output Sample 2:
4
DDRR
数据规模和约定
有20%的数据满足:1<=n,m<=10
有50%的数据满足:1<=n,m<=50
有100%的数据满足:1<=n,m<=500。
分析:用广度优先搜索解决。bfs。100分。
#include <iostream> using namespace std; struct note {int x;int y;int f;int s;char dir; };int main() {char a[501][501];int n, m;cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i][j];}getchar();}int head = 1;int tail = 1;int book[501][501] = {0};book[1][1] = 1;int next[4][2] = {{1, 0},{0, -1},{0, 1},{-1, 0}};int tx = 1;int ty = 1;struct note que[250001];que[tail].x = 1;que[tail].y = 1;que[tail].f = 0;que[tail].s = 0;tail++;int flag = 0;while (head < tail) {for (int k = 0; k <= 3; k++) {tx = que[head].x + next[k][0];ty = que[head].y + next[k][1];if (tx < 1 || tx > n || ty < 1 || ty > m)continue;if (a[tx][ty] == '0' && book[tx][ty] == 0) {book[tx][ty] = 1;que[tail].x = tx;que[tail].y = ty;que[tail].f = head;que[tail].s = que[head].s + 1;if (k == 0) que[tail].dir = 'D';else if (k == 1) que[tail].dir = 'L';else if (k == 2) que[tail].dir = 'R';else if (k == 3) que[tail].dir = 'U';tail++;}if (tx == n && ty == m) {flag = 1;break;}}if (flag == 1) {break;}head++;}cout << que[tail - 1].s << endl;char t[250001];int temp = tail - 1;for (int i = que[tail - 1].s; i >= 1; i--) {t[i] = que[temp].dir;temp = que[temp].f;}for (int i = 1; i <= que[tail - 1].s; i++) {cout << t[i];}return 0; }
PS:如果用深度优先搜索dfs,会超时。30分。
#include <iostream> using namespace std; char a[501][501]; int book[501][501]; int n, m; int min1 = 999999; char s[250001]; char t[250001]; void dfs(int x, int y, int step) {int next[4][2] = {{1, 0},{-1, 0},{0, 1},{0, -1}};int tx, ty;if (x == n && y == m) {if (step < min1) {min1 = step;for (int i = 1; i <= min1; i++)s[i] = t[i];}return;}for (int k = 0; k <= 3; k++) {tx = x + next[k][0];ty = y + next[k][1];if (tx < 1 || ty < 1 || tx > n || ty > m)continue;if (a[tx][ty] == '0' && book[tx][ty] == 0) {book[tx][ty] = 1;if (k == 0) t[step] = 'D';if (k == 1) t[step] = 'L';if (k == 2) t[step] = 'R';if (k == 3) t[step] = 'U';dfs(tx, ty, step + 1);book[tx][ty] = 0;}} }int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i][j];}getchar();}book[1][1] = 1;dfs(1, 1, 1);cout << min1 - 1 << endl;for (int i = 1; i < min1; i++) {cout << s[i];}return 0; }
蓝桥杯 ADV-147 算法提高 学霸的迷宫相关推荐
- 【蓝桥杯】 算法提高 学霸的迷宫(深度优先搜索、BFS)
算法提高 学霸的迷宫 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班 ...
- 算法提高 学霸的迷宫
算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二 ...
- [蓝桥杯]测试题 E 算法提高 我们的征途是星辰大海 题解和C++示例代码
E 算法提高 我们的征途是星辰大海 时间限制:1.0s 内存限制:256.0MB 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成. 共有四种方格: '.' 代表 ...
- 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(251-280)
文章目录 ADV-251 Petri Net Simulation cpp: java: ADV-252 Navigation cpp: ADV-256 The Sky is the Limit cp ...
- [Java] 蓝桥杯ADV-147 算法提高 学霸的迷宫
问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
- 【蓝桥杯练习】算法提高 贪吃的大嘴
问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能 ...
- 试题集—— 算法提高 学霸的迷宫
题目: 问题描述学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪, ...
- 【预览】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛
[预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 完整版链接 文章目录 [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分算法求分界值 2 双指针算法 2.1 求最长的不包 ...
- 蓝桥杯:试题 算法训练 Remember the A La Mode
蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...
最新文章
- Android安全加密:消息摘要Message Digest
- python含金量最高的考试_中国最难的五大考试,第二个含金量最高,考过年薪30万起!...
- dhl:使用return RedirectToAction()和 return view()
- .NET Core微服务之路:让我们对上一个Demo通讯进行修改,完成RPC通讯
- Django后端编辑图片提取主要颜色API
- 删除python类中所有未使用的方法?
- mysql面向对象例子_PHP 面向对象实例:获取数据库用户数据
- mysql输入正确,但远程连接报错
- Node.js 切近实战(七) 之Excel在线(文件文件组)
- 三角函数的正交性为什么要用积分表示
- 网络_简单实现远程唤醒与远程控制(Teamviewer)
- Multisim12\Multisim14访问主数据库失败的解决方法
- 北京林业大学matlab公选课,北京林业大学公选课要求及分类.doc
- Flutter 基础UI功能,常用结构框架代码
- Java--SpringBoot无法访问网站
- 宝塔一键安装php,宝塔管理面板一键安装Tipask3.5版本教程
- FastStone.MaxView.2.keygen-REPT
- Python中: unsupported format character ''' (0x27)
- 使用安卓模拟器和GPA截帧分析手游
- linux androidx86双系统,实用教程:PC实现Windows/原生安卓双系统