蓝桥杯-学霸的迷宫(BFS+记录操作)
接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。数据保证(1,1),(n,m)可以通过。
第二行K个字符,每个字符∈{U,D,L,R},分别表示上下左右。如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。
3 3
001
100
110
Input Sample 2:
3 3
000
000
000
4
RDRD
Output Sample 2:
4
DDRR
有50%的数据满足:1<=n,m<=50
有100%的数据满足:1<=n,m<=500。
看注释就能明白了,顺带一提,因为头文件原因,如果全局变量中命名为map会导致错误,可以使用mapp来避免
node中的far是指向父亲的值,因为要打印移动的路径,因此必须记录
#include<bits/stdc++.h>
using namespace std;
/*PearFL*/
struct node{
int x;
int y;
int cnt;//记录当前已行走数
int dir;//记录到达此位置走的方向
int far;//记录父亲的值
}que[2501];
int next[4][3] = {
{-1, 0, 'U'},//上U
{1, 0, 'D'},//下D
{0, -1, 'L'},//左L
{0, 1, 'R'}//右R
};
char mapp[501][501],path[2500]="";
int book[501][501] = {0};
int n,m,head = 1,tail = 1,flag = 0,tx,ty,i,j;
int main()
{
scanf("%d %d", &n, &m);
for(i = 0; i < n; i++){
scanf("%s", mapp[i]);
}
que[tail].x = 1;
que[tail].y = 1;
que[tail].cnt = 0;
que[tail].far = 0;
tail++;
book[1][1] = 1;
while(head < tail){
if(flag){
break;
}
for(i = 0; i < 4; i++){
tx = que[head].x + next[i][0];
ty = que[head].y + next[i][1];
if(tx < 1 || ty < 1 || tx > n || ty > m){
continue;
}
if(book[tx][ty] == 0 && mapp[tx - 1][ty - 1] == '0'){
book[tx][ty] = 1;
que[tail].x = tx;
que[tail].y = ty;
que[tail].cnt = que[head].cnt + 1;
que[tail].dir = next[i][2];
que[tail].far = head;
tail++;
}
if(tx == n && ty == m){
flag = 1;
break;
}
}
head++;
}
i = tail - 1;
j = 0;
while(que[i].far != 0){
path[j++] = que[i].dir;
i = que[i].far;
}
//输出结果
printf("%d\n", que[tail - 1].cnt);
for(j--; j >= 0; j--){
printf("%c", path[j]);
}
return 0;
}
蓝桥杯-学霸的迷宫(BFS+记录操作)的更多相关文章
- 蓝桥杯---剪格子(DFS&BFS)(小总结)
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)
这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 正解类似:POJ-3984 迷宫问题 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔 ...
- 第十届蓝桥杯 试题 E: 迷宫
试题 E: 迷宫 本题总分:15 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷 ...
- 蓝桥杯九宫重排(bfs+用set去重)
题目连接 #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<iostream> #include<que ...
- 蓝桥杯 跳蚱蜢 (bfs)
转载自:https://blog.csdn.net/wayway0554/article/details/79715658 本题的解题关键就在于将蚱蜢在跳转换为盘子在跳. 当使用string当做每一个 ...
- 2019第十届蓝桥杯 E题 迷宫
/*输入 30 50 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001 ...
- [蓝桥杯2017初赛]迷宫 DFS
题目描述 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间,R表示走到右边 ...
- 蓝桥杯2019初赛]迷宫(dfs版本)
传送门 大意: 题目的意思还是模板的搜索,不同的是我们要记录路径了,而且是最短字典序最小的路径. 思路: 1.对于字典序最小,也就是说我们要尽量先往下走,然后是左- 这个很简单,因为在dfs中是顺序枚 ...
- 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
随机推荐
- 常见的http response
200 //OK 400 //bad request 401 //Una ...
- redis centos 上以 tar.gz 安装redis
1.下载安装文件#wget http://download.redis.io/releases/redis-3.2.3.tar.gz 2.删除文件 rm -rf /usr/local/redisrm ...
- 我大中华微软MVP中国区人才库(转)
出处:http://www.genshuixue.com/i-cxy/p/15349735 刘海峰:国内知名微软开源技术网站51Aspx 创始人,十年以上的asp.net从业经验,微软MSDN特约讲师 ...
- Interceptor for {http://cxf.liuyang.com/}IHiServiceService has thrown exception, unwinding now org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader.
Jquery同域访问:客户端连接服务器访问跨域访问:通过本地html文档,浏览器点击开访问(jquery不支持此访问) 用域名的方式访问http://localhost:8080/CXF_09_jqu ...
- Some_tools
Why and what There are lots of nice or great tools on the internet, sometimes I will just forget a p ...
- 使用Array.prototype.indexOf()的几点注意
对应indexOf这个方法,在日常开发中比较常见的应该是String.prototype.indexOf()方法,Array.prototype.indexOf()方法和其有很大的相似性,本文不想去描 ...
- [Erlang20]一起攻克Binary
第一次看到Joe Armstong的<Erlang 程序设计>里面对Binary的描述时,觉得这个东西好复杂,语法这么奇特(我觉得是Erlang语法中最不好懂的部分); 然后在项目中:Bi ...
- centos7怎能开机设置文本界面
rm -f /etc/systemd/system/default.target 设置命令行级别方法:ln -sf /lib/systemd/system/runlevel3.target /etc/ ...
- web开发有那些牛逼东西可以用
1.squid 缓存网页 2.Pingdom 我使用Pingdom来验证Superexpert.com网站是否总是处在正常运行状态之中.你可以通过浏览“Pingdom.com”的方式来注册Pingdo ...
- SQL Server—— 如何创建定时作业
在做SQL server 管理时,往往需要每日执行定时任务,但是如果每天都去人工执行,非常不方便,而且一般定时操作,都应该是在数据库压力不大时,一般是在夜间.所以我们需要创建定时作业来代替人工的执行定 ...