hdu 1429
http://acm.hdu.edu.cn/showproblem.php?pid=1429
一个广搜的简单题吧,不过有意思的事这个题目用到了位运算,还有就是很恶心的MLE
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std; int m,n,t;
char graph[][];
bool vis[][][<<];
int dic[][] = {-,,,,,-,,};
struct note{ int x,y,state,time; }loc;
queue<note>s;
/*
位运算就是在下面,对于每一个钥匙用二进制的0,1来存
*/
int bfs(int x,int y)
{
while(!s.empty())
s.pop();
loc.state = ;
loc.time = ;
loc.x = x;
loc.y = y;
s.push(loc);
while(!s.empty())
{
note fa,son;
fa = s.front();
s.pop();
// if(fa.time == t) return -1;
for(int i = ; i < ; i++)
{
son.x = fa.x + dic[ i ][ ];
son.y = fa.y + dic[ i ][ ];
if(son.x < || son.y < || son.y > n || son.x > m||!vis[son.x][son.y][fa.state]) continue; //这一行很关键,没有这一行就是MLE
if(graph[son.x][son.y] == '^')
{
if(fa.time == t ) return -;
else return fa.time;
}
if(graph[son.x][son.y] >='a'&& graph[son.x][son.y] <='z' &&vis[son.x][son.y][fa.state| ( <<(graph[son.x][son.y]-'a'))])
{
son.state = fa.state | ( <<(graph[son.x][son.y]-'a'));
son.time = fa.time+;
vis[son.x][son.y][son.state] = false;
s.push(son);
}
else if(graph[son.x][son.y]<='Z' && graph[son.x][son.y] >='A' && fa.state & ( << graph[son.x][son.y]-'A') &&vis[son.x][son.y][fa.state])
{
son.state = fa.state;
son.time = fa.time+;
vis[son.x][son.y][son.state] = false;
s.push(son);
}
else if(graph[son.x][son.y]=='.'||graph[son.x][son.y]=='@'&&vis[son.x][son.y][fa.state])
{
son.state = fa.state;
son.time = fa.time + ;
vis[son.x][son.y][son.state] = false;
s.push(son);
}
}
}
return -;
} int main()
{
// freopen("in.txt","r",stdin);
int x,y;
while(~scanf("%d%d%d",&m,&n,&t))
{
getchar(); //吃掉一个换行符
memset(graph,,sizeof(graph));
memset(vis,true,sizeof(vis));
int ans;
for(int i = ; i <= m; i++)
{
for(int j = ; j <= n ; j++)
{
scanf("%c",&graph[i][j]);
if(graph[i][j]=='@')
x = i,y = j;
}
getchar();
}
ans = bfs(x,y);
printf("%d\n",ans);
}
return ;
}
hdu 1429的更多相关文章
- HDU 1429 (BFS+记忆化状压搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1429 题目大意:最短时间内出迷宫,可以走回头路,迷宫内有不同的门,对应不同的钥匙. 解题思路: 要是 ...
- hdu 1429 胜利大逃亡(续)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...
- hdu 1429 (bfs+状态压缩) 胜利大逃亡续
http://acm.hdu.edu.cn/showproblem.php?pid=1429 典型的状压搜索,在普通的搜索基础上,利用二进制的特性记录钥匙与门, 二进制的每一位代表一把钥匙,比如说拿到 ...
- HDU 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu - 1429 胜利大逃亡(续) (bfs状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=1429 终于开始能够做状态压缩的题了,虽然这只是状态压缩里面一道很简单的题. 状态压缩就是用二进制的思想来表示状态 ...
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 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 ...
- hdu 1429 胜利大逃亡(续) (bfs+状态压缩)
又开始刷题了 题意:略过. 分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙.状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,k ...
- hdu 1429(bfs+状态压缩)
题意:容易理解,但要注意的地方是:如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败.因为这里我贡献了一次wa. 分析:仔细阅读题目之后,会发现最多的钥匙数量为10把,所以把这个作为题目的突破口, ...
随机推荐
- U8采购订单联查采购入库单
1.表头rdrecord01,字段ipurorderid(采购订单ID), cOrderCode(采购订单号)要与采购订单表头主键和单号对应 表体rdrecords01,字段cPOID(采购订单号), ...
- intellij idea 12 编码不可映射字符
IntelliJ IDEA中错误提示:java: Syntax error on token "Invalid Character", delete this token Inte ...
- Python Pandas分组聚合
Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数. apply(),applymap()和map() apply()和applymap()是DataFrame ...
- Codeforces 刷水记录
Codeforces-566F 题目大意:给出一个有序数列a,这个数列中每两个数,如果满足一个数能整除另一个数,则这两个数中间是有一条边的,现在有这样的图,求最大联通子图. 题解:并不需要把图搞出来, ...
- 架构师养成记--8.Queue
一.ConcurrentLinkedQueue 是一个适合在高并发场景下,无锁,无界的,先进先出原则.不允许为null值,add().offer()加入元素,这两个方法没区别:pull().peek( ...
- 一篇对iOS音频比较完善的文章
转自:http://www.cnblogs.com/iOS-mt/p/4268532.html 感谢作者:梦想通 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改我也 ...
- 一次sql注入中转
今天一朋友丢过来一个注入让我看看 url:http://xxxx/ 先看下页面 常规测试一下 用户名输入:' or 1=1 -- - 密码任意 返回 用户名输入:' or 1=2 -- - 返回 基本 ...
- VS2015插件
这里记录一下,VS2015使用的插件和具体用法链接 Refactoring Essentils:代码重构分析 http://vsrefactoringessentials.com/ 可以使用 取消 R ...
- 安装PHP sphinx扩展 sphinx-1.1.0/sphinx.c:105:2: error: too few arguments 错误
表现: /home/sphinx-1.1.0/sphinx.c: In function 'php_sphinx_client_read_property':/home/sphinx-1.1.0/sp ...
- java 多线程 4 线程池
系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互.在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 与数据库连接池类似 ...