HDU1429:胜利大逃亡(续)
传送门
题意
给出一个迷宫,门需要钥匙来打开,t秒内能否从起点到达终点
分析
这题我用以前一道题的代码改了改就过了,具体思想:设置vis[status][x][y],status记录到达该点拥有的钥匙,每次更新,这样可以保证最短
trick
代码
/*
每个点在拥有相同钥匙(状态)下都只走一遍,这样可以最短
*/
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
#define cpy(a,b) memcpy(a,b,sizeof(b))
#pragma comment(linker, "/STACK:102400000,102400000")
inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}
int n,m,ans,t;
char s[25][25];
bool vis[2048][25][25];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
struct node
{
int x,y,status,time;
node(){}
node(int xx,int yy,int s,int t)
{
x=xx,y=yy,status=s,time=t;
}
}tmp,p;
int bfs(int sx,int sy)
{
mem(vis,0);
queue<node>q;
p={sx,sy,0,0};
q.push(p);
while(!q.empty())
{
tmp=q.front();
q.pop();
for(int i=0;i<4;++i)
{
int x=tmp.x+dir[i][0],y=tmp.y+dir[i][1],status=tmp.status,time=tmp.time;
if(x>=0&&x<n&&y>=0&&y<m&&s[x][y]!='*'&&!vis[status][x][y])
{
if(s[x][y]>='A'&&s[x][y]<='J')
{
int ret=s[x][y]-'A';
if(status&(1<<ret))
{
vis[status][x][y]=1;
q.push(node(x,y,status,time+1));
}
}
else if(s[x][y]>='a'&&s[x][y]<='j')
{
int ret=s[x][y]-'a';
status|=(1<<ret);
vis[status][x][y]=1;
q.push(node(x,y,status,time+1));
}
else if(s[x][y]=='.')
{
vis[status][x][y]=1;
q.push(node(x,y,status,time+1));
}
else if(s[x][y]=='^') return time+1;
}
}
}
return -1;
}
int main()
{
int sx,sy;
while(scanf("%d %d %d",&n,&m,&t)==3)
{
R(i,0,n)
{
scanf("%s",&s[i]);
R(j,0,m) if(s[i][j]=='@') { sx=i;sy=j;s[i][j]='.'; break; }
}
ans=bfs(sx,sy);
if(ans==-1||ans>=t) puts("-1");else printf("%d\n",ans);
}
return 0;
}
HDU1429:胜利大逃亡(续)的更多相关文章
- Hdu1429 胜利大逃亡(续) 2017-01-20 18:33 53人阅读 评论(0) 收藏
胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Subm ...
- hdu1429 胜利大逃亡(续) 【BFS】+【状态压缩】
题目链接:https://vjudge.net/contest/84620#problem/K 题目大意:一个人从起点走到终点,问他是否能够在规定的时间走到,在走向终点的路线上,可能会有一些障碍门,他 ...
- 胜利大逃亡(续)hdu1429(bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu 1429 胜利大逃亡(续)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...
- Hdu 1429 胜利大逃亡(续) 分类: Brush Mode 2014-08-07 17:01 92人阅读 评论(0) 收藏
胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Subm ...
- HDOJ 1429 胜利大逃亡(续)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdu 1429 胜利大逃亡(续)(bfs+位压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDU 1429 胜利大逃亡(续)(DP + 状态压缩)
胜利大逃亡(续) Problem Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)…… 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢 ...
- 胜利大逃亡(续)(状态压缩bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
随机推荐
- 洛谷—— P1098 字符串的展开
https://www.luogu.org/problem/show?pid=1098 题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类 ...
- Java并发包——线程安全的Collection相关类
Java并发包——线程安全的Collection相关类 摘要:本文主要学习了Java并发包下线程安全的Collection相关的类. 部分内容来自以下博客: https://www.cnblogs.c ...
- Eclipse的Servers视图中无法添加Tomcat6/Tomcat7
原文:http://blog.csdn.net/blueheart20/article/details/40043749 问题的提出: 无法从以下方式,添加Tomcat服务器. 其中ServerNa ...
- 一句话从MySQL导出CSV文件
mysql -h <host> -u<user> -p<passport> crm -e "select ....." | csvcut -t ...
- Centos5.11 //IP/phpmyadmin 远程无法登入
异地登入phpmyadmin时,会出现"You don't have permission to access /phpmyadmin/ on this server."这是因为配 ...
- http://vdceye.com/ 全新页面上线
vdceye manager home page
- 一个DIV相对于另一个DIV定位
<div style="position:relative"><div style="position:absolute; top:0px; left: ...
- hadoop3 无法启动 查找内存消耗原因
[root@hadoop3 hadoop]# xloStarting namenodes on [hadoop3]上一次登录:三 12月 27 15:07:11 CST 2017pts/24 上had ...
- 借助ltp语义分析提取特征,之后,文本生成
"""地点-哪里有做-业务-的(正规|靠谱)-公司?地点-做-业务-的(正规|靠谱)-公司(有哪些?|的联系方式是什么?|哪家口碑好值得信赖?)地点-做-业务-(怎么能省 ...
- BootstrapValidator demo
source:http://bv.doc.javake.cn/api/ BootstrapValidator is the best jQuery plugin to validate form fi ...