题目描述
小明在玩一款迷宫游戏,在游戏中他要控制自己的角色离开一间由NxN个格子组成的2D迷宫。
小明的起始位置在左上角,他需要到达右下角的格子才能离开迷宫。
每一步,他可以移动到上下左右相邻的格子中(前提是目标格子可以经过)。
迷宫中有些格子小明可以经过,我们用’.‘表示;
有些格子是墙壁,小明不能经过,我们用’#'表示。
此外,有些格子上有陷阱,我们用’X’表示。除非小明处于无敌状态,否则不能经过。

有些格子上有无敌道具,我们用’%'表示。
当小明第一次到达该格子时,自动获得无敌状态,无敌状态会持续K步。
之后如果再次到达该格子不会获得无敌状态了。

处于无敌状态时,可以经过有陷阱的格子,但是不会拆除/毁坏陷阱,即陷阱仍会阻止没有无敌状态的角色经过。

给定迷宫,请你计算小明最少经过几步可以离开迷宫
输入
第一行包含两个整数N和K。 (1 <= N <= 1000 1 <= K <= 10)
以下N行包含一个NxN的矩阵。
矩阵保证左上角和右下角是’.’。
输出
一个整数表示答案。如果小明不能离开迷宫,输出-1。
样例输入
5 3
…XX
##%#.
…#.
.###.

样例输出
10
思路:挺明显的一个bfs题目,但是某个点不能单纯的走过就不能走了,因为有另外一个元素k。而且k很小。所以我们就用一个三维数组标记,如果某个点在无敌状态为k时已经走过了,就不能再走了。剩下的就是在每一种状态时的判断了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e3+100;
struct node{int x,y,k,val;node(int a,int b,int c,int v){x=a,y=b,k=c,val=v;}
};
int d[][2]={{1,0},{0,1},{0,-1},{-1,0}};
char s[maxx][maxx];
int vis[maxx][maxx][11];
int n,k;inline int bfs()
{queue<node> q;vis[0][0][0]=1;q.push(node(0,0,0,0));while(q.size()){node u=q.front();q.pop();if(u.x==n-1&&u.y==n-1) return u.val;for(int i=0;i<4;i++){int tx=u.x+d[i][0];int ty=u.y+d[i][1];if(tx<0||ty<0||tx>=n||ty>=n||s[tx][ty]=='#') continue;if(s[tx][ty]=='%'&&vis[tx][ty][k]==0){vis[tx][ty][k]=1;q.push(node(tx,ty,k,u.val+1));}else {if(s[tx][ty]=='X'&&u.k&&vis[tx][ty][u.k-1]==0){vis[tx][ty][u.k-1]=1;q.push(node(tx,ty,u.k-1,u.val+1));}else if(s[tx][ty]=='.'&&u.k&&vis[tx][ty][u.k-1]==0){vis[tx][ty][u.k-1]=1;q.push(node(tx,ty,u.k-1,u.val+1));}else if(s[tx][ty]=='.'&&u.k==0&&vis[tx][ty][0]==0){vis[tx][ty][0]=1;q.push(node(tx,ty,0,u.val+1));}}}}return -1;
}
int main()
{scanf("%d%d",&n,&k);memset(vis,0,sizeof(vis));for(int i=0;i<n;i++) scanf("%s",s[i]);int ans=bfs();if(ans==-1) printf("-1\n");else printf("%d\n",ans);return 0;
}

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

[蓝桥杯][2018年第九届真题]迷宫与陷阱(三维数组标记BFS)相关推荐

  1. C++ 字符串流stringstream(附蓝桥杯2018年第九届真题缩位求和题解)

    一.stringstream介绍 stringstream是 C++ 提供的一个字符串流(stream),,必须包含其头文件: #include <sstream> < sstrea ...

  2. [蓝桥杯][2018年第九届真题]小朋友崇拜圈、耐摔指数、堆的计数、缩位求和、约瑟夫环

    个人题解链接,蓝桥杯历届试题,正在更新中~ 文章目录 个人题解链接,蓝桥杯历届试题,正在更新中~ 小朋友崇拜圈 耐摔指数 堆的计数 缩位求和 约瑟夫环 小朋友崇拜圈 题目描述 班里N个小朋友,每个人都 ...

  3. [蓝桥杯][2018年第九届真题]整理玩具(树状数组)

    题目描述 小明有一套玩具,一共包含NxM个部件.这些部件摆放在一个包含NxM个小格子的玩具盒中,每个小格子中恰好摆放一个部件. 每一个部件上标记有一个0~9的整数,有可能有多个部件标记相同的整数. 小 ...

  4. [蓝桥杯][2018年第九届真题]调手表(BFS)

    题目描述 小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在 ...

  5. [蓝桥杯][2018年第九届真题]版本分支(离线LCA模板)

    题目描述 小明负责维护公司一个奇怪的项目.这个项目的代码一直在不断分支(branch)但是从未发生过合并(merge). 现在这个项目的代码一共有N个版本,编号1~N,其中1号版本是最初的版本. 除了 ...

  6. [蓝桥杯][2018年第九届真题]调手表-bfs

    小明买了块高端大气上档次的电子手表,他正准备调时间呢.在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟.大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时候, ...

  7. [蓝桥杯][2018年第九届真题]全球变暖

    全球变暖 题目描述 思路解析 AC代码 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... . ...

  8. 题目 2194: 蓝桥杯2018年第九届真题-递增三元组

    答题记录: 第一次做:答案错误  审题出错 第二次做:时间超限,用了3 个for循环 做了13'分钟 代码出错: for循环中循环变量写错 第三次做:答案正确,用哈希表化简时间复杂度,(减少一个for ...

  9. 蓝桥杯2018年第九届真题——乘积尾零

    乘积尾零 一.题目内容 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 如下的 10 行数据,每行有 10 个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 ...

最新文章

  1. form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。...
  2. 字符串之数字子串求和
  3. Knockoutjs 实践入门 (2) 绑定事件
  4. 新来乍到,谢谢大家捧场
  5. 关于大小端、位域的一些概念
  6. 转帖一则——从医学角度论成熟
  7. 【面试题】444- 55 道常见CSS面试题
  8. goland 注释模板_Java程序员简历模板,怎样才是一份好的技术简历
  9. 天津全国计算机等级考试考点,2018年下半年全国计算机等级考试报考简章及天津考点安排...
  10. c# winform 任务栏显示和隐藏
  11. 【项目实例】使用C#开发纽曼USB来电通来电弹屏客户端小结
  12. Win32控制台应用程序如何调用另一个.exe
  13. 2019/04/12 华为通用软件开发工程师现场面试(offer到手)
  14. 极光推送在Android端的集成
  15. [React 基础系列] 受控表单 vs 不受控表单
  16. 全国湿地分类数据:内陆沼泽、盐碱地、红树林、潮汐平地
  17. Ubuntu18.04 + RTX 2080 Ti 安装NVIDIA显卡驱动的一些坑
  18. 分布式系统相关书籍pdf免费下载
  19. 11.elasticsearch认证考试总结
  20. c语言输出cad scr文件,CAD脚本文件(*.scr)有什么用?

热门文章

  1. c语言编程 完美数,用完美数的数字之美激发学生学习C语言编程的兴趣
  2. android编译非静态内部类,Android 非静态内部类/匿名类引起的内存泄漏
  3. pwmc语言调速程序_51单片机的直流电机PWM调速系统设计,正转反转,加减速,急停等,仿真和代码...
  4. 查询成绩最好的前两名_一级建造师成绩查询前这几件事很重要
  5. 小度智能音箱维修点_小度智能音箱APP下载
  6. Unable to load script from assets ‘index.android.bundle‘.
  7. python 映射和反映射_python映射类型的相关介绍
  8. winform combobox选择后_后驱车真的比前驱车更加高级吗?涨知识了!
  9. 量子计算机能让科技发展有多快,量子计算机有多快?
  10. mysql中having的例子_mysqlgroupby/having/distinct查询使用例子_MySQL