Description

最近Bob参加了集训,学会了许多新技能,其中一个技能就是神奇的穿墙术。

Bob到处炫耀他的技能,比如用这个技能使得他能够更快地走迷宫。

但是每轮都有使用次数的限制,而且每次他只能穿过一层墙壁(也就是,每经过一次墙壁后,下一步必须走到空地上)。

在迷宫中Bob每次只能选择往上下左右四个方向走一格。

Input

第一行是一个整数T(T<=20),表示数据组数。

接下来有T组数据,每组数据的第一行是三个整数N,M,K,

分别表示表示迷宫的长宽和Bob最多可以使用技能的次数。

接着是N行M列的迷宫。(2<=N,M<=20, 0<=K<=10)

其中’S’表示起点,’T’表示终点,’x’表示墙,’.’表示空地。

Output

对于每组输入,输出一个整数表示Bob最少花费的时间。(即走过的格数,包括穿墙)

如果不能到达终点,则输出-1。

Sample Input

2
3 3 1
S..
xxx
..T
3 4 2
Sxx.
.xxT
x...

Sample Output

4
6

这次总算没有折腾一晚上了,主要的坑点就是vis数组里应该加一个已经使用穿墙术次数的状态。
代码如下:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct node
{int x,y;int t;int time;int digest;
};
node S;
char map[25][25];
int vis[15][25][25];
int m,n,k;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int check(int digest,int i,int j)
{if(map[i][j]==0||vis[digest][i][j]==1)return 0;return 1;
}
int bfs()
{queue<node> q;q.push(S);vis[S.digest][S.x][S.y]=1;while(!q.empty()){node now=q.front();q.pop();if(map[now.x][now.y]=='T'&&now.digest<=k)return now.time;for(int i=0;i<4;i++){node next;next.x=now.x+dir[i][0];next.y=now.y+dir[i][1];next.time=now.time+1;next.digest=now.digest;if(!check(next.digest,next.x,next.y))continue;if(map[next.x][next.y]=='x'){if(map[now.x][now.y]=='x')continue;else{if(next.digest>=k)continue;next.digest++;}}vis[next.digest][next.x][next.y]=1;q.push(next);}}return -1;
}
int main(void)
{int t,i,j;cin>>t;while(t--){memset(map,0,sizeof(map));memset(vis,0,sizeof(vis));cin>>n>>m>>k;for(i=1;i<=n;i++)for(j=1;j<=m;j++){cin>>map[i][j];if(map[i][j]=='S'){S.x=i;S.y=j;S.time=0;S.digest=0;}}int ans=bfs();cout<<ans<<endl;}
}

SHU1923 穿墙术(三维BFS)相关推荐

  1. Dungeon Master(三维bfs)java

    题意: You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed o ...

  2. 胜利大逃亡 三维BFS

    Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0 ...

  3. 智能路由器要成功 该怎样修炼穿墙术?

    对于占用户绝大多数的小白用户来说,智能的概念其实更多的就是不用在麻烦,不用专业,一键完成,就如当年一键杀毒.一键清理电脑垃圾一样. 因为参与了海康威视的萤石W1智能生活路由器的测评,才有了这个不像测评 ...

  4. Dungeon Master 三维BFS

    三维BFS DungeonMasterDungeon\ MasterDungeon Master 跟二维没啥区别,就是方向多了几个,但在写的过程中出的bugbugbug还是蛮多的,所以记录一下吧! # ...

  5. 木马病毒隐身穿墙术解密之文件注入和反弹连接

    作者: 刘源 比特网 2010-04-01 12:05:08 木马病毒隐身穿墙术解密之文件注入和反弹连接 对于木马病毒当前所使用的隐身和穿墙术,到这篇已经是第三篇了,虽然每篇的篇幅都不是很长,但每篇都 ...

  6. 贪吃蛇—C—基于easyx图形库(下):从画图程序到贪吃蛇【自带穿墙术】

    上节我们用方向控制函数写了个小画图程序,它虽然简单好玩,但我们不应该止步于此.革命尚未成功,同志还需努力. 开始撸代码之前,我们先理清一下思路.和前面画图程序不同,贪吃蛇可以有很多节,可以用一个足够大 ...

  7. Slackware穿墙术(转)

    Slackware穿墙术(转)[@more@] 前两天6刚刚练成,做个简单的记录.用debian的不用这么辛苦,apt-get就是了.我用的是Slackware,没有现成编译好的可以下载,但是用源代码 ...

  8. 【POJ2251】Dungeon Master(三维BFS)

    题面:[POJ2251]Dungeon Master 这是一道很有意思的题目,平时我们所接触的BFS大多是二维的,可这题不一样,这题是一道三维BFS!!! 这题不需要多讲,直接上代码就可以了: #in ...

  9. 木马病毒隐身穿墙术解密之修改特征码和加壳

    木马病毒隐身穿墙术解密之修改特征码和加壳 作者:比特网 | 比特网 本文关键词:安全 病毒 木马 现在,木马病毒在各种安全防范措施的拦截之下,依然没有任何减少的迹象,甚至还在向更多的方向发展.在防范木 ...

最新文章

  1. su如何变成实体_不用建模就能生成地形,SU怎么办到的?
  2. 2021年春季学期-信号与系统-第八次作业参考答案-第六小题
  3. Android LayoutInflater详解
  4. DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图)、七大层级结构(动态图详解卷积/池化+方块法理解卷积运算)、CNN各层作用及其可视化等之详细攻略
  5. 我是如何解决asp.net程序在dreamWeaver中布局乱码的问题
  6. 使您的Java代码闻起来很新鲜
  7. 搜狗高速浏览器打开网页没有声音怎么办
  8. python多进程解决多路视频流卡帧、掉帧、延时等问题
  9. 计算机教师招聘试题(汇总集合版),计算机教师招聘试题(汇总集合版)ed.doc
  10. php获取客户端信息(浏览器/IP/操作系统)代码
  11. linux编辑复制多行命令,linux下文本编辑器vim的使用,复制-粘贴-替换-行号-撤销-多文件操作...
  12. 一个计算机软件学生的求职简历,计算机学生求职的个人简历模板
  13. xcode ios 模拟器安装运行
  14. 判断一个时间点是否在一个时间段的方法
  15. 错误代码0x80004005
  16. 使用Stellarium查看彗星
  17. 猿匹配 , 一款使用环信实现的一个开源聊天应用含服务器
  18. 计算机组成原理 三种加法微操作命令
  19. linux修改键盘按键
  20. LVGL (7) 显示对接

热门文章

  1. 项目实战10——对生产环境要有敬畏之心
  2. 【BZOJ 2149】 拆迁队
  3. 玩游戏提升计算机内存不足,为什么我电脑玩游戏有时显示内存不足。
  4. 每周训练5小时,自信从容进大厂 | 20年码龄的技术VC大咖为你的面试指点迷津
  5. 神经网络的三种训练方法,神经网络训练过程图解
  6. springboot 定时任务动态启动和停止
  7. Java入门项目:实现简单学生管理系统(逐个功能详解版)
  8. 群晖服务器里很多tmp文件,黑群晖 篇一:内存映射解决黑群晖休眠频繁唤醒问题...
  9. GNSS增强定位技术发展与星地融合应用
  10. C++进阶教程 - 委托构造函数和继承构造函数