hdu 1429

时间:2022-09-07 11:39:42

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的更多相关文章

  1. HDU 1429 &lpar;BFS&plus;记忆化状压搜索&rpar;

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1429 题目大意:最短时间内出迷宫,可以走回头路,迷宫内有不同的门,对应不同的钥匙. 解题思路: 要是 ...

  2. hdu 1429 胜利大逃亡&lpar;续&rpar;

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...

  3. hdu 1429 &lpar;bfs&plus;状态压缩&rpar; 胜利大逃亡续

    http://acm.hdu.edu.cn/showproblem.php?pid=1429 典型的状压搜索,在普通的搜索基础上,利用二进制的特性记录钥匙与门, 二进制的每一位代表一把钥匙,比如说拿到 ...

  4. HDU 1429 胜利大逃亡&lpar;续&rpar;(bfs&plus;状态压缩,很经典)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  5. hdu - 1429 胜利大逃亡&lpar;续&rpar; &lpar;bfs状态压缩&rpar;

    http://acm.hdu.edu.cn/showproblem.php?pid=1429 终于开始能够做状态压缩的题了,虽然这只是状态压缩里面一道很简单的题. 状态压缩就是用二进制的思想来表示状态 ...

  6. hdu&period;1429&period;胜利大逃亡&lpar;续&rpar;&lpar;bfs &plus; 0101011110)

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

  7. Hdu 1429 胜利大逃亡&lpar;续&rpar; 分类: Brush Mode 2014-08-07 17&colon;01 92人阅读 评论&lpar;0&rpar; 收藏

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

  8. hdu 1429 胜利大逃亡&lpar;续&rpar; &lpar;bfs&plus;状态压缩&rpar;

    又开始刷题了 题意:略过. 分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙.状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,k ...

  9. hdu 1429&lpar;bfs&plus;状态压缩&rpar;

    题意:容易理解,但要注意的地方是:如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败.因为这里我贡献了一次wa. 分析:仔细阅读题目之后,会发现最多的钥匙数量为10把,所以把这个作为题目的突破口, ...

随机推荐

  1. java中Class对象详解和类名&period;class&comma; class&period;forName&lpar;&rpar;&comma; getClass&lpar;&rpar;区别

    一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到Java的反射----- Java反射学习 所谓反射,可以 ...

  2. C&plus;&plus; 中 int 转string&comma; 以及10进制转2进制

    感谢:http://blog.csdn.net/xiaofei2010/article/details/7434737 以及:http://www.cnblogs.com/nzbbody/p/3504 ...

  3. Java 多态 虚方法

    Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载. 看代码: package com.company; public class Main { public stati ...

  4. CSS的继承与优先级

    CSS样式继承性 body,div,p{} html文档可以上图的种种节点树的形式表示,css层叠样式表中的各元素也有这种对应关系 <body>是文档中最大的根节点,body中的所有元素都 ...

  5. 2014年1月9日 Oracle 实用系统函数

    1.空值处理 1.1 NVL(column/value,VALUE2) 与SQLSERVER的ISNULL相同 1.2 NVL2(column/value,Value2,Value3) 若参数1为空则 ...

  6. 项目详解4—haproxy 详解

    一.企业服务架构图及负载均衡的要求 1.场景说明 在企业生产环境中,每天会有很多的需求变更,比如增加服务器.新业务上线.url路由修改.域名配置等等,对于前端负载均衡设备来说,容易维护,复杂度低,是首 ...

  7. day-7 一个简单的决策树归纳算法(ID3)python编程实现

    本文介绍如何利用决策树/判定树(decision tree)中决策树归纳算法(ID3)解决机器学习中的回归问题.文中介绍基于有监督的学习方式,如何利用年龄.收入.身份.收入.信用等级等特征值来判定用户 ...

  8. Java异常实战——OutOfMemoryError

    在Java虚拟机规范描述中,除了程序计数器外,虚拟机内存的其他几个运行区域都有发生 OOM 异常的可能.在这里,用代码验证各个运行时区域存储的内容并讨论该如何进行处理 Java堆溢出 Java 堆用于 ...

  9. 小米5查看设备号信息及验证type-c数据线

    首先,下载adb软件. 接着打开系统的开发者模式和调试模式. 打开cmd软件,切换到adb软件文件夹所在路径,输入命令:adb devices,则能看到设备的设备号信息. 如果设备号是00000001 ...

  10. 检查 NaN 数据值 &lpar;C&sol;C&plus;&plus;&sol;Python 实现&rpar;

    NaN 是 Not a Number 的缩写.它是一个数值类型值,通常在浮点计算中,表示未定义或无法表示的值.而且,不能直接使用相等运算符 (==) 检查 NaN.由于在程序中,nan == nan ...