HDU1429 bfs
胜利大逃亡(续)
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8175 Accepted Submission(s): 2933
这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方。刚开始Ignatius被关在(sx,sy)的位置,离开地牢的门在(ex,ey)的位置。Ignatius每分钟只能从一个坐标走到相邻四个坐标中的其中一个。魔王每t分钟回地牢视察一次,若发现Ignatius不在原位置便把他拎回去。经过若干次的尝试,Ignatius已画出整个地牢的地图。现在请你帮他计算能否再次成功逃亡。只要在魔王下次视察之前走到出口就算离开地牢,如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败。
. 代表路
* 代表墙
@ 代表Ignatius的起始位置
^ 代表地牢的出口
A-J 代表带锁的门,对应的钥匙分别为a-j
a-j 代表钥匙,对应的门分别为A-J
每组测试数据之间有一个空行。
-1
//显然bfs,但是要记录访问过的状态,用二进制记录访问过的状态vis[21][21][1<<11],[1<<10]记录10把钥匙的状态
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct Lu
{
char mp[][];
int px,py,tim;
int sta;
}L;
int dir[][]={,,-,,,,,-};
bool vis[][][<<];
int n,m,t;
int bfs()
{
queue<Lu>q;
Lu L1,L2;
memset(vis,,sizeof(vis));
vis[L.px][L.py][]=;
L.tim=;L.sta=;
q.push(L);
while(!q.empty()){
L1=q.front();
q.pop();
if(L1.tim>=t) break;//超过时间就不用搜了
if(L1.mp[L1.px][L1.py]=='^') return L1.tim;
for(int i=;i<;i++){
int x=L1.px+dir[i][],y=L1.py+dir[i][];
if(x<||x>=n||y<||y>=m) continue;
if(L1.mp[x][y]=='*') continue;
if(L1.mp[x][y]>='a'&&L1.mp[x][y]<='j'){
L2=L1;
L2.sta=(L1.sta|(<<(L1.mp[x][y]-'a')));
vis[x][y][L1.sta]=;
L2.px=x;L2.py=y;
L2.mp[x][y]='.';
L2.tim++;
q.push(L2);
}
if(L1.mp[x][y]>='A'&&L1.mp[x][y]<='J'){
int now=(<<(L1.mp[x][y]-'A'));
if(!(now&L1.sta)) continue;
L2=L1;
vis[x][y][L1.sta]=;
L2.px=x;L2.py=y;
L2.mp[x][y]='.';
L2.tim++;
q.push(L2);
}
else if(!vis[x][y][L1.sta]){
L2=L1;
vis[x][y][L1.sta]=;
L2.px=x;L2.py=y;
L2.tim++;
q.push(L2);
}
}
}
return -;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&t)!=EOF){
for(int i=;i<n;i++){
scanf("%s",L.mp[i]);
for(int j=;j<m;j++)
if(L.mp[i][j]=='@') {L.px=i;L.py=j;}
}
int ans=bfs();
printf("%d\n",ans);
}
return ;
}
HDU1429 bfs的更多相关文章
- HDU1429+bfs+状态压缩
bfs+状态压缩思路:用2进制表示每个钥匙是否已经被找到.. /* bfs+状态压缩 思路:用2进制表示每个钥匙是否已经被找到. */ #include<algorithm> #inclu ...
- BFS+状态压缩 HDU1429
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 胜利大逃亡(续)hdu1429(bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu1429之BFS
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu1429 胜利大逃亡(续) 【BFS】+【状态压缩】
题目链接:https://vjudge.net/contest/84620#problem/K 题目大意:一个人从起点走到终点,问他是否能够在规定的时间走到,在走向终点的路线上,可能会有一些障碍门,他 ...
- 胜利大逃亡 HDU1429 (bfs)
最后两题算是这个专题最难的两题了 这题关键是标记数组 我一开始设置的是 四维的 第三维是朝向 第四维是钥匙个数 但是 不同的取法钥匙个数可能会重复 如:取ab钥匙和取ac钥匙都是两枚 导致w ...
- BFS+二进制状态压缩 hdu-1429
好久没写搜索题了,就当练手吧. vis[][][1025]第三个维度用来维护不同key持有状态的访问情况. 对于只有钥匙没有对应门的位置,置为'.',避免不必要的状态分支. // // main.cp ...
- hdu1429(bfs+状态压缩)
思路:有十个门,有十把钥匙,每把钥匙对应一个门,相同的门可以有多个.这样,我们就得按照状态来搜索,用0000000001代表第一个门有钥匙了,1000000000代表第十个门钥匙有了.......一次 ...
- HDU1429 胜利大逃亡 状压bfs
http://acm.hdu.edu.cn/viewcode.php?rid=22225154 因为总共a-j有10种钥匙,所以可以把有没有钥匙的状态压到一个int数里,然后dfs. 昨天状态特别不好 ...
随机推荐
- display:block;inline;inline-block大总结
总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...
- cocos2d-x 3.x 橡皮擦功能
1.HelloWorldScene.h cocos2d::DrawNode* _eraser; cocos2d::RenderTexture*_renderTexture; 2.HelloWorldS ...
- ArrayList遍历的同时删除--- 删除还是用迭代器的比较好,其它的都会有问题.
http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除-- 删除还是用迭代器的比较好,其它的都会有问题. 博客分类: 随笔 Javathread ...
- 一个opencv 博客 大量文章(老版本编写C )
http://blog.csdn.net/Augusdi/article/category/747412
- 使用Java的BlockingQueue实现生产者-消费者
http://tonl.iteye.com/blog/1936391 使用Java的BlockingQueue实现生产者-消费者 博客分类: Java JavaBlockingQueue阻塞队列 B ...
- php-fpm配置优化
PHP配置文件php-fpm的优化 2013/06/28 php, php-fpm 应用加速与性能调优 评论 6,029 本文所涉及的配置文件名为PHP-fpm.conf,里面比较重要的配置项有如 ...
- Beautiful Subarrays
Beautiful Subarrays time limit per test 3 seconds memory limit per test 512 megabytes input standard ...
- ANSI X9.8标准 PIN xor PAN获取PIN BlOCK
ANSI X9.8标准 PIN xor PAN获取PIN BlOCK 之前看到几篇介绍,把ANSI说成16个字节,真心扯淡,各种误人子弟,真正的ANSI算法其实是8个字节,具体格式如下: (1) AN ...
- PAT (Advanced Level) 1072. Gas Station (30)
枚举一下选的位置,每次算一下就可以了. #include<cstdio> #include<cstring> #include<cmath> #include< ...
- 试题公式解决方案--kindeditor集成jmeditor公式web编辑器
最近在搞一套在线的考试系统,一直为即支持公式编辑又得支持各种附件上传.图片上传.视频音频上传.文字编辑 的web编辑器而犯愁.于是乎试着把 kindeditor和jmeditor集成一下,多了不说了直 ...