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. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射——对象的三种关系 Hibernate框架基于ORM设 ...

  2. 让System.Drawing.Bitmap可以在linux运行

    .net core的bitmap使用的是以下类库,但无法在linux运行 https://github.com/CoreCompat/CoreCompat 在linux运行需要安装runtime.li ...

  3. CAD绘制一个直径标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimDiametric 绘制一个直径标注.详细说明如下: 参数 说明 DOUBLE dChordPointX 在被标注的曲线上的第一个点X值 DOU ...

  4. Linux快速入门教程-进程管理ipcs命令学习

    使用Linux系统必备的技能之一就是Linux进程管理,系统运行的过程正是无数进程在运行的过程.这些进程的运行需要占用系统的内存等资源,做好系统进程的管理,对于我们合理分配.使用系统资源有非常大的意义 ...

  5. openstack——horizon篇

    一.horizon 介绍:       理解 horizon   Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashB ...

  6. (C/C++学习)6.数组指针和指针数组

    说明:int (*p)[4] 和 int *p[4](数组指针和指针数组),如果你是一个初学者,也许当你看到这两个名词的时候,已经懵了.其实,只要你理解了其中的含义.这两个名词对你来说会相当简单并且很 ...

  7. JAVA学习总结-基础语法

    /** * 这篇文章供自己学习JAVA总结回顾使用 * 主要借鉴了马士兵老师的视频进行总结 * @author Kingram */ 标识符的概念和命名规则 JAVA常量---不可变的变量 程序的执行 ...

  8. 198. House Robber(动态规划)

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  9. vue 组件通信传值

    父子组件通信: 子组件 <template> <div> <h3 @click="alerrt"> 我是子组件一</h3> < ...

  10. 【hiho一下 第144周】机会渺茫

    [题目链接]:http://hihocoder.com/contest/hiho144/problem/1 [题意] [题解] 找出两个数相同的因子的个数x 然后两个数各自的因子的个数numa,nub ...