sdut2193救基友记3(三维)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2193
救基友记3
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
妖怪的闺房是一个n*m的矩阵,并且某些地方安装了带锁的门,钥匙藏在闺房另外的某些地方。刚开始WP被关在(sx,sy)的位置,离开闺房的门在(ex,ey)的位置。WP每分钟只能从一个坐标走到相邻四个坐标中的其中一个。妖怪每t分钟回闺房视察一次,若发现CZ不在原位置便把他再拎回去。经过若干次的尝试,CZ已画出整个闺房的地图。现在请你帮他计算能否再次成功逃亡。只要在妖怪下次视察之前走到出口就算离开闺房,如果妖怪回来的时候刚好走到出口或还未到出口都算逃亡失败。
输入
. 代表路
* 代表墙
@ 代表CZ的起始位置
^ 代表闺房的出口
A-J 代表带锁的门,对应的钥匙分别为a-j
a-j 代表钥匙,对应的门分别为A-J
每组测试数据之间有一个空行。
输出
示例输入
4 5 17
@A.B.
a*.*.
*..*^
c..b* 4 5 16
@A.B.
a*.*.
*..*^
c..b*
示例输出
16
-1 通过二进制来记录是否已经得到钥匙,例如101010101 说明已经得到a,c,e,g,i钥匙。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int n,m,tt;
struct node
{
int x,y,z;
int ans;
} q[];
char map[][];
int v[][][];
int jx[]= {,-,,};
int jy[]= {,,,-};
void bfs(int xx,int yy)
{
memset(v,,sizeof(v));
int s=;
int e=;
struct node t,f;
t.x=xx;
t.y=yy;
t.ans=;
t.z=;
q[e++]=t;
v[t.x][t.y][]=;
while(s<e)
{
t=q[s++];
if(map[t.x][t.y]=='^')
{
if(t.ans<tt)
{
printf("%d\n",t.ans);
return ;
}
else
{
printf("-1\n");
return ;
} }
for(int i=; i<; i++)
{
f.x=t.x+jx[i];
f.y=t.y+jy[i];
f.z=t.z;
if(f.x>=&&f.x<n&&f.y>=&&f.y<m&&v[f.x][f.y][f.z]==&&map[f.x][f.y]!='*')//因为钥匙的变化,f.z也会变化,所以有钥匙和没钥匙走的是不同的路线
{
if(map[f.x][f.y]>='a'&&map[f.x][f.y]<='j')
{
int s1,s2,s3;
s1=map[f.x][f.y]-'a';
s2=f.z;
while(s1--)//判断之前有没有拿到过着把钥匙
{
s2=s2/;
}
s3=s2%;
if(s3==)
{
s1=map[f.x][f.y]-'a';
s2=;
while(s1--)
{
s2=s2*;
}
f.z=f.z+s2;
}
f.ans=t.ans+;
q[e++]=f;
v[f.x][f.y][f.z]=;
}
else if(map[f.x][f.y]>='A'&&map[f.x][f.y]<='J')
{
int s1,s2,s3;
s1 = map[f.x][f.y] - 'A';
s2 = f.z;
while(s1--)
{
s2 /= ;
}
s3 = s2 % ;//判断之前有没有拿到钥匙
if(s3 == )
{
f.ans = t.ans + ;
q[e++]=f;
v[f.x][f.y][f.z]=;
}
}
else
{
f.ans=t.ans+;
f.z=t.z;
v[f.x][f.y][f.z]=;
q[e++]=f;
}
}
}
}
printf("-1\n");
}
int main()
{
int x,y,j;
while(scanf("%d%d%d",&n,&m,&tt)!=EOF)
{
for(int i=; i<n; i++)
scanf("%*c%s",map[i]);
for(int i=; i<n; i++)
{
for(j=; j<m; j++)
{
if(map[i][j]=='@')
{
x=i;
y=j;
break;
}
}
if(j!=m) break;
}
bfs(x,y);
}
return ;
}
sdut2193救基友记3(三维)的更多相关文章
- 救基友3(三维BFS)
救基友记3 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 话说CZ因为不守基道.被妖怪抓走了.好基友WP在努力讨好高富帅 ...
- Java练习 SDUT-2192_救基友记2
救基友记2 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 屌丝WP的好基友CZ又被妖鬼给抓走了(CZ啊,CZ-.怎么说 ...
- SDUT2190救基友记1
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2190 思路 : 这个题,一开始以为是博弈,以为 ...
- Java常用类、集合框架类1
A 时间日期格式转换(SDUT 2246)(SimpleDateFormat用法) 转换的df2里面时间是US,上面的df1可以是CHINA或者US. package test; import j ...
- 线性代数与Python
1.向量1.1向量例子1.2向量加法与减法1.3向量的乘法2.矩阵2.1矩阵例子2.2矩阵的形状2.3矩阵的创建函数 1.向量 向量是指可以加总(以生成新的向量),可以乘以标量(即数字),也可以生成新 ...
- 小P寻宝记——好基友一起走
小P寻宝记--好基友一起走 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 话说.上次小P到伊利哇呀国旅行得到了一批宝藏.他是 ...
- (全然背包)小P寻宝记——好基友一起走
题目描写叙述 话说.上次小P到伊利哇呀国旅行得到了一批宝藏.他是相当开心啊.回来就告诉了他的好基友小鑫.于是他们又结伴去伊利哇呀国寻宝. 这次小P的寻宝之路可没有那么的轻松,他们走到了一个森林,小鑫一 ...
- 01背包--小P寻宝记——粗心的基友
题目描写叙述 这对好基友他们在经历无数的艰难险阻后.最终找到了宝藏.无奈的是这一对好基友居然是一样的粗心,又忘记了带一个大一点的包包,可惜啊..选择又出现了啊.. 已知包的体积是v,每种宝贝仅仅有一种 ...
- 记一次联想A820t救砖线刷
因为是看着教程刷的(有大神放出教程,只管伸手拿来就好啦)但是照着教程做的过程中出现了一些问题还是值得注意的,在这里总结一下,给新手提供一点建议 教程比较长,我放到博客的文件中,需要的自己下载一下.或者 ...
随机推荐
- 删除SQL注入的一些方法总结
sql替换法: ); set @myStr='oa_20121026new.bak</title><style>.alx2{position:absolute;clip:rec ...
- 【swagger学习】.net WebApi中使用swagger
我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...
- 原生js--类的扩充和类型检测
扩充类的方法: 1.向原型对象上添加方法或属性.例如:Number.prototype.cl = function(){}; 但这种做法并不推荐,因为ES5之前,无法将这些新添加的方法或属性设置为不可 ...
- vue Element动态设置el-menu导航当前选中项
1,npm install vuex --save 2,在src下新建vuex文件夹,新建store.js文件: store.js import Vue from 'vue' import Vuex ...
- 【JSP】JSP的介绍和基本原理
JSP简介 JSP的核心实质是Servlet技术.JSP是后来添加的基于Servlet的一种扩展技术.但二者在使用上有不同的方向. 由于Servlet实质是一个Java类,因此非常适合用来处理业务逻辑 ...
- python nose测试框架全面介绍五--attr介绍
之前写了一系列nose框架的,这篇介绍下attr tag 在nose框架中attr用来标识用例,使得在运行时可以通过标识来执行用例,之前在nose测试框架全面介绍四中有说明,但没有说明清楚,这里再总结 ...
- selenium下firefox自动下载配置及问题
在做自动化测试时,需要从网页上下载相关的文件到指定的目录,一直未能实现 网上正好有个blog文章介绍了如何下载 直接上代码: from selenium import webdriver import ...
- css如何设置label的字间距
css.html如何设置label的字间距 .myClass label{ letter-spacing: 10px; } 如果label需要居中,需加上 text-indent: 10px; 首行 ...
- Spark2 oneHot编码--标准化--主成分--聚类
1.导入包 import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache ...
- 大话FLASH和EEPROM
最近在看代码的时候,遇到了一个使用FLASH模拟EEPROM的情况,看到这个我当时是一脸蒙蔽啊,对于一个有时候连FLASH和EEPROM都分不清的人来说,怎么可能读懂用FLASH来模拟EEPROM呢? ...