蓝桥杯-学霸的迷宫(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 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
随机推荐
- SQLServer获取临时表列名并判断指定列名是否存在
if(OBJECT_ID('tempdb.dbo.#tempTB') is not null)begin drop table #tempTB;end create table #tempTB(ID ...
- http://4526621.blog.51cto.com/4516621/1343369
http://4526621.blog.51cto.com/4516621/1343369
- IP转换成域名
DNS就是域名解析系统,它可以将IP转换成域名,也可以将域名转换成IP 1. 安装DNS服务 开始—〉设置—〉控制面板—〉添加/删除程序—〉添加/删除Windows组件—〉“网络服务”—〉选择“域名服 ...
- 在MS Test中如何测试private方法
前言: 在博客开始之前,我们先讨论一下是否应该对private方法做测试,通常有两种观点: private方法应该被测试: private方法不应该被测试: 我们以下面的代码为例子来进行说明: pub ...
- Excel应用程序如何创建数据透视表
原文作者:andreww 原文链接: http://blogs.msdn.com/andreww/archive/2008/07/25/creating-a-pivottable-programmat ...
- kubernetes多节点的pod挂载同一个cephfs目录
一.安装cephfs 方法一: 直接进入deploy目录,执行: ceph-deploy --overwrite-conf mds create ceph01:mds-daemon- 上面的ceph0 ...
- Oracle学习笔记(五)
七.查询 1.基本查询语句 select 列名字,列名字 from 表名字 例如 select user_a_id from userinfo; 2.在SQL*PLUS中设置格式 (1)设置新的字段名 ...
- swift的可选值(optional)
苹果那文档写了一大堆也没有好好的写一下可选值(optional)这个东西.就是在有一个“Optional Chaining”的章节,但是也不是很充分的说明.最后找了半天在“the basics”里墨迹 ...
- Mixin模式
Mixin是JavaScript中用的最普遍的模式,几乎所有流行类库都会有Mixin的实现. Mixin是掺合,混合,糅合的意思,即可以就任意一个对象的全部或部分属性拷贝到另一个对象上. 从提供的接口 ...
- Jquery EasyUI 各组件属性、事件详解
CSS类定义: div easyui-window window窗口样式 属性如下: 1) modal:是否生成模态窗口.tru ...