胜利大逃亡(续)(bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1429
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
struct node
{
int x,y;
int state;
int step;
} s,t;
int Time,n,m;
int s_x,s_y,e_x,e_y;
char a[][];
int vis[][][];//标记状态
int dir[][] = {{,},{-,},{,-},{,}};
void bfs()
{
memset(vis,,sizeof(vis));
queue<node>q;
s.x = s_x;
s.y = s_y;
s.state = ;
s.step = ;
q.push(s);
vis[s_x][s_y][s.state] = ;
while(!q.empty())
{
t = q.front();
q.pop();
int x = t.x;
int y = t.y;
if (x==e_x&&y==e_y)
{
Time = t.step;
return ;
}
for (int i = ; i < ; i++)
{
int dx = x+dir[i][];
int dy = y+dir[i][]; if (dx>=&&dx<n && dy>=&&dy<m && (!vis[dx][dy][t.state]) && a[dx][dy]!='*')
{
if (a[dx][dy]=='.'||a[dx][dy]=='^'||a[dx][dy]=='@')
{
vis[dx][dy][t.state] = ;
s.x = dx;
s.y = dy;
s.step=t.step+;
s.state = t.state;
q.push(s); }
else if (a[dx][dy]>='A' && a[dx][dy]<='J')
{
if ((<<(a[dx][dy]-'A'))&t.state)//判断是否拿到过能打开当前门的钥匙
{
vis[dx][dy][t.state] = ;
s.x = dx;
s.y = dy;
s.step = t.step+;
s.state = t.state;
q.push(s);
}
}
else if (a[dx][dy]>='a' && a[dx][dy] <= 'j')
{
int state= ((<<(a[dx][dy]-'a'))|t.state);//更新此时拿到的钥匙的状态
if (!vis[dx][dy][state])
{
vis[dx][dy][state] = ;
s.x = dx;
s.y = dy;
s.step = t.step+;
s.state = state;
q.push(s);
} }
}
}
}
}
int main()
{
int t;
while(~scanf("%d%d%d%*c",&n,&m,&t))
{
Time = -;
for (int i = ; i < n; i++)
scanf("%s",a[i]);
for (int i = ; i < n; i++)
{
for (int j = ; j < m; j++)
{
if (a[i][j]=='@')
{
s_x = i;
s_y = j;
}
if (a[i][j]=='^')
{
e_x = i;
e_y = j;
}
}
}
bfs();
if (Time < t && Time!=-)
printf("%d\n",Time);
else
printf("-1\n");
}
return ;
}
胜利大逃亡(续)(bfs)的更多相关文章
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu 1429 胜利大逃亡(续)(bfs+位压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdu 1429 胜利大逃亡(续) (bfs+状态压缩)
又开始刷题了 题意:略过. 分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙.状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,k ...
- HDOJ 1429 胜利大逃亡(续) (bfs+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 思路分析:题目要求找出最短的逃亡路径,但是与一般的问题不同,该问题增加了门与钥匙约束条件: 考虑 ...
- hdu_1429_胜利大逃亡(续)(BFS状压)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 题意:迷宫的加强版,迷宫里有钥匙和门,问在指定的时间下能否逃出 题解:用二进制位来记录是否有该门 ...
- hdu - 1429 胜利大逃亡(续) (bfs状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=1429 终于开始能够做状态压缩的题了,虽然这只是状态压缩里面一道很简单的题. 状态压缩就是用二进制的思想来表示状态 ...
- 胜利大逃亡(续)(状态压缩bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 胜利大逃亡(续)(bfs+状态压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 胜利大逃亡(续)hdu1429(bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
随机推荐
- 安装nodejs6.9x以后,原来在nodejs4.2.x中运行正常的ionic项目出现问题的解决
安装nodejs6.9x以后,原来在nodejs4.2.x中运行正常的程序出现的问题.看错误信息,由于NodeJs版本升级导致的. 到提示的目录下运行:npm rebuild node-sass -g ...
- Python 之mysql类封装
import pymysql class MysqlHelper(object): conn = None def __init__(self, host, username, password, d ...
- VUE路由history模式坑记--NGINX
因微信分享和自动登录需要,对于URL中存在'#'的地址,处理起来比较坑(需要手动写一些代码来处理).还有可能会有一些隐藏的问题没被发现. 如果VUE能像其他(JSP/PHP)系统的路径一样,就不存在这 ...
- id 转 entity
object 是 entity原始的类 要使用id转化成entity要先将id.getobject 然后将这个值 (entity)转化成entity entity ent =id.getentity& ...
- 如何在mac里面,把xcode代码同步到 tfs 的 git库(克隆git篇)
如果是新的git库,还没有任何内容可以克隆,可以参考:http://www.cnblogs.com/IWings/p/6755795.html 在mac安装visual studio code htt ...
- Linux基础篇(1)
1.计算机硬件的五大单元 五大单元:输入单元,输出单元,CPU内部的控制单元,算术逻辑单元与内存等五大部分. (Ps:CPU实际要处理的数据完全来自于内存) 2.计算机上常用的计算单位 (1)容量单位 ...
- 【模板】Manacher 回文串
推荐两个讲得很好的博客: http://blog.sina.com.cn/s/blog_70811e1a01014esn.html https://segmentfault.com/a/1190000 ...
- springcloud(三):Eureka服务端
一. 因为使用一个注册中心服务器端,n个客户端:n个生产者客户端.n消费者客户端....,所有的客户端最好的方式就是通过对象传递参数,因此需要创建一个公共组件项目,为n个客户端传值提供方便 二.创建公 ...
- C#关键字详解第五节
最近有点忙于追剧<人民的名义>所以并未及时更新,所以大家理解理解,哈哈,这部剧很不错!推荐大家去 看看!下面我们继续C#关键字解释! const:常量 一般我们说常量都是以PI(3.14) ...
- Java基础学习总结(69)——匿名内部类与Lambda表达式
前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedy ...