胜利大逃亡(续)(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 ...
随机推荐
- VHDL_ADC之cic_diffcell
library IEEE; use ieee.std_logic_1164.all; use ieee.numeric_std.all; library edclib; use edclib.pkg_ ...
- mysql命令行导出数据
1. 包含表头 mysql -h${1} -P${2} -u${3} -p${4} -Dpom_${5} --default-character-set=utf8 -B -e > result. ...
- 移动端rem布局 js
// rem布局适配 (function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in ...
- 基于fpga uart学习笔记
2018年7月24日 uart 接收 部分测试成功,多谢开源骚客 邓堪文老师 ,想学的同学可以微信公众号搜索开源骚客 好啦!言归正传. 1.先附上老师的时序图,自己有点懒不想画,rx_t.rx_tt. ...
- Django - 路由对应关系
1.对url路由关系命名,以后可以根据此名称,生成自己想要的url urls.py中: url('^fdsaafdf(\d+)/',views.index,name='indexx') url('^f ...
- POJ 1088 滑雪(简单的记忆化dp)
题目 又一道可以称之为dp的题目,虽然看了别人的代码,但是我的代码写的还是很挫,,,,,, //看了题解做的简单的记忆化dp #include<stdio.h> #include<a ...
- poj3176-Cow Bowling【dp】
The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...
- Django URL(路由系统)
Django URL Django 1.11版本 URLconf官方文档 URL配置(URLconf)就像 Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的 ...
- Python基础-奇偶判断调用函数
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 1/1+1/3+...+1/n. 首先写一个n为偶数的函数: def peven(n): s = 0 ...
- PAT 1107 Social Clusters
When register on a social network, you are always asked to specify your hobbies in order to find som ...