胜利大逃亡(续)

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 9076    Accepted Submission(s): 3275

Problem Description
Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)……



这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方。刚开始Ignatius被关在(sx,sy)的位置,离开地牢的门在(ex,ey)的位置。Ignatius每分钟只能从一个坐标走到相邻四个坐标中的其中一个。魔王每t分钟回地牢视察一次,若发现Ignatius不在原位置便把他拎回去。经过若干次的尝试,Ignatius已画出整个地牢的地图。现在请你帮他计算能否再次成功逃亡。只要在魔王下次视察之前走到出口就算离开地牢,如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败。
 
Input
每组测试数据的第一行有三个整数n,m,t(2<=n,m<=20,t>0)。接下来的n行m列为地牢的地图,其中包括:



. 代表路

* 代表墙

@ 代表Ignatius的起始位置

^ 代表地牢的出口

A-J 代表带锁的门,对应的钥匙分别为a-j

a-j 代表钥匙,对应的门分别为A-J



每组测试数据之间有一个空行。
 
Output
针对每组测试数据,如果可以成功逃亡,请输出需要多少分钟才能离开,如果不能则输出-1。
 
Sample Input
4 5 17
@A.B.
a*.*.
*..*^
c..b* 4 5 16
@A.B.
a*.*.
*..*^
c..b*
 
Sample Output
16
-1
 
Author
LL
Problem : 1429 ( 胜利大逃亡(续) )     Judge Status : Accepted

RunId : 21338472    Language : C++    Author : hnustwanghe

Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>

using namespace std;
const int N = 20 + 5;
typedef struct node{
int x,y,step,key;
bool operator < (const node x)const {
return step > x.step;
}
}Node;
char mat[N][N];
bool visit[N][N][1030];
Node start;
int n,m,k;
const int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int BFS(){
priority_queue<Node> Q;
memset(visit,0,sizeof(visit));
Node s;
visit[start.x][start.y][start.key] = true;
Q.push(start);
while(!Q.empty()){
Node t = Q.top();Q.pop();
if(mat[t.x][t.y]=='^' && t.step < k) return t.step;
for(int d=0;d<4;d++){
s = t;
s.x = s.x + dir[d][0];
s.y = s.y + dir[d][1];
if(s.x >= 0 && s.x < n && s.y >= 0 && s.y < m && mat[s.x][s.y]!='*'&& !visit[s.x][s.y][s.key]){
if(mat[s.x][s.y]>='A'&&mat[s.x][s.y]<='J'){
int key = 1<<(mat[s.x][s.y]-'A');
if(s.key & key){
s.step+=1;
visit[s.x][s.y][s.key] = true;
if(s.step < k)
Q.push(s);
}
}else if(mat[s.x][s.y]>='a' && mat[s.x][s.y]<='j'){
int key = 1<<(mat[s.x][s.y]-'a');
s.key=s.key|key;
s.step+=1;
visit[s.x][s.y][s.key] = true;
if(s.step < k)
Q.push(s);
}else {
s.step+=1;
visit[s.x][s.y][s.key] = true;
if(s.step < k)
Q.push(s);
}
}
}
}
return -1;
}
void Input_data(){
for(int i=0;i<n;i++){
scanf("%s",mat[i]);
for(int j=0;j<m;j++)
if(mat[i][j] == '@')
start.x =i,start.y = j,start.step =start.key = 0;
}

}
int main(){
while(scanf("%d %d %d",&n,&m,&k)==3){
Input_data();
printf("%d\n",BFS());
}
}

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>

using namespace
std;
const int
N = 20 + 5;
typedef struct
node{
int
x,y,step,key;
bool operator < (const
node x)const {
return
step > x.step;
}
}
Node;
char
mat[N][N];
bool
visit[N][N][1030];
Node start;
int
n,m,k;
const int
dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int
BFS(){
priority_queue<Node> Q;
memset(visit,0,sizeof(visit));
Node s;
visit[start.x][start.y][start.key] = true;
Q.push(start);
while(!
Q.empty()){
Node t = Q.top();Q.pop();
if(
mat[t.x][t.y]=='^' && t.step < k) return t.step;
for(int
d=0;d<4;d++){
s = t;
s.x = s.x + dir[d][0];
s.y = s.y + dir[d][1];
if(
s.x >= 0 && s.x < n && s.y >= 0 && s.y < m && mat[s.x][s.y]!='*'&& !visit[s.x][s.y][s.key]){
if(
mat[s.x][s.y]>='A'&&mat[s.x][s.y]<='J'){
int
key = 1<<(mat[s.x][s.y]-'A');
if(
s.key & key){
s.step+=1;
visit[s.x][s.y][s.key] = true;
if(
s.step < k)
Q.push(s);
}
}else if(
mat[s.x][s.y]>='a' && mat[s.x][s.y]<='j'){
int
key = 1<<(mat[s.x][s.y]-'a');
s.key=s.key|key;
s.step+=1;
visit[s.x][s.y][s.key] = true;
if(
s.step < k)
Q.push(s);
}else {

s.step+=1;
visit[s.x][s.y][s.key] = true;
if(
s.step < k)
Q.push(s);
}
}
}
}
return -
1;
}
void
Input_data(){
for(int
i=0;i<n;i++){
scanf("%s",mat[i]);
for(int
j=0;j<m;j++)
if(
mat[i][j] == '@')
start.x =i,start.y = j,start.step =start.key = 0;
} }
int main(){
while(
scanf("%d %d %d",&n,&m,&k)==3){
Input_data();
printf("%d\n",BFS());
}
}

 

搜索专题: HDU1429胜利大逃亡的更多相关文章

  1. Hdu1429 胜利大逃亡(续) 2017-01-20 18:33 53人阅读 评论(0) 收藏

    胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

  2. hdu1429胜利大逃亡(bfs)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  3. hdu1429 胜利大逃亡(续) 【BFS】+【状态压缩】

    题目链接:https://vjudge.net/contest/84620#problem/K 题目大意:一个人从起点走到终点,问他是否能够在规定的时间走到,在走向终点的路线上,可能会有一些障碍门,他 ...

  4. HDU1429 胜利大逃亡 状压bfs

    http://acm.hdu.edu.cn/viewcode.php?rid=22225154 因为总共a-j有10种钥匙,所以可以把有没有钥匙的状态压到一个int数里,然后dfs. 昨天状态特别不好 ...

  5. HDU1429:胜利大逃亡(续)

    传送门 题意 给出一个迷宫,门需要钥匙来打开,t秒内能否从起点到达终点 分析 这题我用以前一道题的代码改了改就过了,具体思想:设置vis[status][x][y],status记录到达该点拥有的钥匙 ...

  6. hdu1429 胜利大逃亡(续)???天天逃亡???

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1429/ 题目就是迷宫问题的变种,给出一张地图,上面分布着钥匙和门,一种要是只能开一种特定的门,给出起点和终点,问 ...

  7. 胜利大逃亡(续)hdu1429(bfs)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. 题目1456:胜利大逃亡(广度优先搜索BFS)

    题目链接:http://ac.jobdu.com/problem.php?pid=1456 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  9. hdoj 1253 胜利大逃亡

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

随机推荐

  1. POJ 2186 挑战 --牛红人 强连通分量——Tarjan

    题意:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的,如:a欢迎b,b欢迎c,那么a欢迎c .另外每个奶牛都是欢迎他自己的.求出被所有的奶牛欢迎的奶牛的数目.#i ...

  2. gdal test

    https://blog.csdn.net/hb_programmer/article/details/81807699 gdal/ogr是一个光栅和矢量地理空间数据格式的翻译库,由开源地理空间基金会 ...

  3. (66)Nginx+lua+Redis开发

    一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器.目前,Apache依然web服务器中的老大,但是在全球前1000大的web服务器中,Nginx的份额为22.4%.Nginx采用 ...

  4. [BZOJ4237]稻草人:CDQ分治+单调栈

    分析 按\(y\)排序后CDQ分治,可以发现每个点可以影响的是\(x\)坐标的一段区间,可以使用扫描线+单调栈,在单调栈上二分即可解决,时间复杂度\(O(n \log^2 n)\). 通过归并排序可以 ...

  5. 大数据笔记(三十二)——SparkStreaming集成Kafka与Flume

    三.集成:数据源 1.Apache Kafka:一种高吞吐量的分布式发布订阅消息系统 (1) (*)消息的类型 Topic:主题(相当于:广播) Queue:队列(相当于:点对点) (*)常见的消息系 ...

  6. Canvas 实现钟表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. java分页原理及分类

    1.使用List接口最终subList()方法实现分页 2.直接使用数据库SQL语句实现分页 3.使用hibernate等框架实现跨数据库的分页 mybatis是面向SQL的,本质上和第二种分页方式相 ...

  8. csdn专家主页

    百度张瑞琪: http://blog.csdn.net/abcjennifer 深度学习系列教程: http://suanfazu.com/t/caffe/9479

  9. JS将页面中表格,导出到Excel中(IE中)

    原文地址:http://blog.csdn.net/sinat_15114467/article/details/51098522 var idTmr; function getExplorer() ...

  10. 任泽平:95页PPT分析2018(经济、房价、政策)

    任泽平:95页PPT分析2018(经济.房价.政策) 2017-12-07 06:38房价