蓝桥杯-学霸的迷宫(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 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
随机推荐
- mongo学习-group操作以及java代码
原数据: /* 1 */ { "_id" : ObjectId("552a330e05c27486b9b9b650"), "_class" ...
- HAService 刨坑
High availability is a characteristic of a system, which describes the duration (length of time) for ...
- JavaScript语言精粹 笔记06 方法
JS包含了少量可用在标准类型上的标准方法. ArrayFunctionNumberObjectRegExpString Array array.concat(item...) concat方法返回一个 ...
- 使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值
使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值. 当前仅总结使用EN5339芯片的方案 Vout = Ra*0.6/Rb + 0.6 芯片手册推荐Ra取348K,则 3.3V时,取R ...
- 解决部分版本kali升级后w3af无法运行的问题
1,w3af简介 w3af是一个Web应用程序攻击和检查框架.该项目已超过130个插件,其中包括检查网站爬虫,SQL注入(SQL Injection),跨站(XSS),本地文件包含(LFI),远程文件 ...
- 使用google chrome抓取数据:抓取全国的高中的数据
http://tomycat.github.io/blog/other/2014/05/28/use-google-chrome-capture-data.html
- testNG的高级用法 --DataProvider
@DataProvider Method参数 数据提供者的第一个参数是java.lang.reflect.Method,TestNG传递这个将调用的测试方法.如果您希望数据提供者根据不同的测试方法返回 ...
- SQL SERVER 查找锁信息
通过系统的存储过程 sp_who 或 sp_who2 可以查找出所有的锁信息, 但是看不出是哪个表, 什么语句 当使用 sp_who 或 sp_who2 查找锁信息的时候, 有个 spid 信息, ...
- PostgreSQL创建表及约束
创建表 语法: create table table_name ( column_name type column_constraint, table_constraint table_constra ...
- asp.net mvc 上传图片 摘自mvc 高级编程第311页
Image Uploads I am going to complete the SportsStore user experience with something a little more so ...