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 &;amp;&;amp; 状态压缩】
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 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 ...
- HDU 4616 Game (搜索)、(树形dp)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616 这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎…… 搜索AC代码: #include & ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
随机推荐
- JQuery中的选择器的总结
JQuery的选择器十分的强大,但是我平常经常用到的却十分的有限,趁现在有时间我感觉有必要总结一下. 基本选择器 $("#ID") 选择ID所对应的标签元素 返回一个标签元素$(& ...
- 立体匹配:关于用OpenCV彩色化middlebury网站给定的视差
#include "XYZ.h" void readPFM(Mat_<float> &disp, float &scale, string path) ...
- (转)SQL对Xml字段的操作
T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...
- 外部式css样式,写在单独的一个文件中
外部式css样式(也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css”为扩展名,在<head>内(不是在<style>标签内)使用<l ...
- [C#绘图]在半透明矩形上绘制字符串
首先要绘制一个半透明的矩形,用到的方法当然是FillRectangle().这个函数在调用的时候除了要指明要绘制的矩形外,还要指明填充矩形的背景色.具体的方法就是在绘制矩形的时候传给它一个画刷Brus ...
- 拓扑排序<;反向拓扑+有向环的判断>;
题目链接 #include <set> #include <map> #include <cmath> #include <queue> #includ ...
- 转-编写CGI小结
由于Carl要用到我的程序,我们便合作工作.但是他写的程序是Python的,我写的程序是Java的,必须得找一种方式进行通信.尽管有Jython这些东西,但是Carl认为还是CGI最简便.于是,前阵子 ...
- Redis在Linux系统下的安装和启动
详情可参见:https://blog.csdn.net/q1035331653/article/details/79077260 开机自启脚本参见:https://www.cnblogs.com/si ...
- logmnr使用
logminer 工具的使用 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体 ...
- 【剑指offer】题目二
//实现一个函数:把字符串中的每个空格替换成"%20".例如输入"We are happy."则输出"We%20are%20happy." ...