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

  1. hdu.1429.胜利大逃亡(续)(bfs + 0101011110)

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

  2. hdu 1429 胜利大逃亡(续)(bfs+位压缩)

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

  3. hdu 1429 胜利大逃亡(续) (bfs+状态压缩)

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

  4. HDOJ 1429 胜利大逃亡(续) (bfs+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 思路分析:题目要求找出最短的逃亡路径,但是与一般的问题不同,该问题增加了门与钥匙约束条件: 考虑 ...

  5. hdu_1429_胜利大逃亡(续)(BFS状压)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 题意:迷宫的加强版,迷宫里有钥匙和门,问在指定的时间下能否逃出 题解:用二进制位来记录是否有该门 ...

  6. hdu - 1429 胜利大逃亡(续) (bfs状态压缩)

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

  7. 胜利大逃亡(续)(状态压缩bfs)

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

  8. 胜利大逃亡(续)(bfs+状态压缩)

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

  9. 胜利大逃亡(续)hdu1429(bfs)

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

随机推荐

  1. gitlab 第1次提交代码到1个新仓库

    1.如果是本地刚刚搭建好git环境,第一次和gitlab服务器产生连接 参照这个文 https://www.cnblogs.com/kaerxifa/p/10929098.html 2.已经和gitl ...

  2. linux mysql-workbench 创建与正式库表结构一样的表

    先在本地创建数据库 字符集选择这个 创建数据库成功 创建与正式库一样的表 step1: 连接正式库,找到要生成的表,导出创建表的sql语句 step2: 找到本地数据库,选择表,在sql执行区域复制s ...

  3. 用C#在Visual Studio写Javascript单元测试

    1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...

  4. 【转载】IDEA:XML配置提示URI is not registered

    在idea开发中,遇到xml提示URI is not registered....其实是idea找不到约束文件,下面讲解一下如何解决这一个问题吧. 现的问题是,xml文件右边有提示,提示内容为:URI ...

  5. PAT_A1114#Family Property

    Source: PAT A1114 Family Property (25 分) Description: This time, you are supposed to help us collect ...

  6. APIshop精选接口助力双十一电商业务

    距离2018年双11的购物盛典已经不到一个月了,各大电商之间的战役已经悄然打响,今年的双11仍会是一场电商鏖战,想必又会打破2017年双11近2540亿的全网成交总额记录. 据统计,去年双11全天共产 ...

  7. Self-Attetion

    四.self-attention 1.是什么? attention机制通常用在encode与decode之间,但是self-attention则是输入序列与输出序列相同,寻找序列内部元素的关系即 K= ...

  8. Python变量的命名 单下划线和双下划线

    python命名变量的区别 foo: 一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突,就是例如__init__(),__del__(),__call__()这些特殊方法 _f ...

  9. Linux文件、目录属性

    文件.目录属性 可能有人觉得,文件这东西这么普通有什么好讲的,,,其实不然,在linux中一切皆文件,搞清楚文件的本质,将对我们大有裨益. 文件.目录属性简介 举个例子 randolf@localho ...

  10. 原来PHP对象比数组用更少的内存

    一直以为php的数组更节省内存,从来没有测试过,今天因为要读取一个大配置文件作为pool.做了一次测试: 得出结论是 使用对象保存数据更好,花费的内存是数组array的1/4. 测试代码 class ...