hdu 5094 Maze(水搜索)
题目意思:说有一个人在(1,1) 他的目标点在(n,m) 每次是4方向的移动;
限制条件:有的各自之间有墙 或者门,强不可通过,有对应的要钥匙可以开启这个类型的所有门;
问题:求最少步骤数(和);
类似于poj 2935;
解:很明显的搜索 只要建图弄得好就非常好写:我还是 很推荐自己的建图 方法,不经常建图的可以看一看:(特别是 一个地方可以有多种钥匙,一开始我就Wa了)
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;
const int maxn=**(<<)+;
bool flag[][][(<<)+];
struct info
{
int x,y,S,ans;
info (){}
info(int x,int y,int S,int ans):x(x),y(y),S(S),ans(ans){}
void input()
{
scanf("%d%d",&x,&y);
}
void FLAG()
{
flag[x][y][S]=true;
}
};
int n,m,p;
int Map[][];
int direct[][][];
info que[maxn];
const int dd[][]={,,-, ,,-,,};
bool jude(int & x,int & y)
{
return x>=&&y>=&&x<=n&&y<=m;
}
void inint()
{
memset(direct,,sizeof direct);
memset(Map,,sizeof Map);
memset(flag,false,sizeof flag);
}
void work()
{
info a,b;
a.input();b.input();
int key;
scanf("%d",&key);
for(int i=;i<;i++)
{
if((a.x+dd[i][]==b.x) && (a.y+dd[i][]==b.y))
{
direct[a.x][a.y][i]= (key== ? -:key);
direct[b.x][b.y][i^]=(key== ? -:key);
break;
}
} }
bool ok(const info & tmp,const int &i)
{
if(direct[tmp.x][tmp.y][i] == ) return true;
if(direct[tmp.x][tmp.y][i] == -) return false;
return ( <<(direct[tmp.x][tmp.y][i]-) ) & tmp.S;
}
int solve()
{
int l,r;l=r=;
que[r++]=info(,,Map[][],);
while(l<r)
{
info tmp=que[l++];
if(tmp.x==n&&tmp.y==m) return tmp.ans;
for(int i=;i<;i++)
{
if( !ok(tmp,i) ) continue;
int x=tmp.x+dd[i][];
int y=tmp.y+dd[i][];
if(!jude(x,y)) continue; info t=info(x,y ,tmp.S|Map[x][y],tmp.ans+); if(!flag[x][y][t.S])
{
que[r++]=t;
t.FLAG();
if(t.x==n&&t.y==m) return t.ans;
}
}
}
return -;
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&p))
{
inint();
scanf("%d",&p);
for(int i=;i<=p;i++) work();
scanf("%d",&p);
for(int i=;i<=p;i++){
int x,y,key;
scanf("%d%d%d",&x,&y,&key);
Map[x][y]|=(<<(key-));
}
printf("%d\n",solve());
}
return ;
}
hdu 5094 Maze(水搜索)的更多相关文章
- hdu 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- HDU 5094 --Maze【BFS && 状态压缩】
Maze Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Others) Total Sub ...
- HDU - 5094 Maze(状压+bfs)
Maze This story happened on the background of Star Trek. Spock, the deputy captain of Starship Enter ...
- hdu 5094 Maze bfs
传送门:上海邀请赛E 给定一个n×m的迷宫,给出相邻格子之间的墙或者门的信息,墙说明不可走,假设是门则须要有相应的钥匙才干通过,问是否可以从(1,1)到达(n,m) 一个带状态的bfs,再另记一个状态 ...
- HDU 5094 Maze (状压)
加一个维度,钥匙的状态,状压一下.n很小,钥匙也只有10个,bfs就好了. 忘了数组初始化.以后坚决不犯这种低级错误. #include<cstdio> #include<queue ...
- hdu 5094 Maze (BFS+状压)
题意: n*m的迷宫.多多要从(1,1)到达(n,m).每移动一步消耗1秒.有P种钥匙. 有K个门或墙.给出K个信息:x1,y1,x2,y2,gi 含义是(x1,y1)与(x2,y2)之间有gi ...
- hdu5012 水搜索
题意: 给你一个正方体的初始状态和末状态,问你是否可以再6步之内转到这个状态,有四种转的方式,如果你面对的是正方向的正前方,那么转的方式就是 顺时针,逆时针,上,下. 思路: ...
- HDU 4035 Maze 概率DP 搜索
解题报告链接: http://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html 先推公式,设计状态,令DP[i]表示在房间i退出要走步数 ...
- hdu 2181 水搜索
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
随机推荐
- 解析android framework下利用app_process来调用java写的命令及示例
解析android framework下利用app_process来调用java写的命令及示例 在android SDK的framework/base/cmds目录下了,有不少目录,这些目的最终都是b ...
- LeetCode——Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- BI中事实表和维度表的定义
一个典型的样例是,把逻辑业务比作一个立方体,产品维.时间维.地点维分别作为不同的坐标轴,而坐标轴的交点就是一个详细的事实.也就是说事实表是多个维度表的一个交点.而维度表是分析事实的一个窗体. 首先介绍 ...
- poj2387(最短路)
题目连接:http://poj.org/problem?id=2387 题意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离. 分析:最短路裸题. #include ...
- HighChart学习-更新数据data Series与重绘
一:HighChart介绍 基于JQuery的纯JavaScript的图标库,支持各种图表显示,同时还支持Mootools 与Prototype详细版本支持在这里: JQuery 1.3.2 - 1. ...
- SE 2014年5月5日
如图配置 某企业网络规划图(三台交换设备/三台路由设备) 接入层 SW1 连接终端用户 汇聚层 SW2 SW3 核心层 R1 R2 R5 1. 如图 SW1 SW2 SW3 物理链路两两相连接,网络中 ...
- Python的TkinterButton做为父窗口
#-*-coding:utf--*- import Tkinter,time,tkMessageBox,sys,BeBigModule class MainFrame: def __init__(se ...
- Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框
现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个, ...
- nginx学习12 ngx_cycle_t 和 ngx_init_cycle
在nginx在启动过程,ngx_init_cycle这个函数最初始工作.变量的初始化存储在ngx_cycle_t这个结构体中,为了深入了解这个函数都做了那些初始化工作,就化时间研究了一下.并写下来以便 ...
- 每天一个JavaScript实例-html5拖拽
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...