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阅读代码]圆形旋转菜单CircleMenu
项目名称:圆形旋转菜单CircleMenu 原版项目代码下载 感谢原作者开源
- JavaScript 中的事件类型4(读书笔记思维导图)
Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件. UI(User Interface,用户界面)事件:当用户与页面上的元素交 ...
- PS CC 2014 把一个图层输出为文件的方法
近期在设计一个Qt控件,须要获得一个圆饼的图片,在用PS绘制后发现保存的时候总是会带着背景,用PNG格式保存之后背景依旧存在.仅仅是变成了透明的.刚才在Google上查到了仅仅保存单一图层而全然没有背 ...
- ASP.NET MVC 4高级编程(第4版)
<ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway Phil Haack Brad Wilson K. Scott All ...
- Python做的眼睛护士
搞了两天终于搞定了,虽然还存在一点点小问题(窗口的显示位置应该设在(0,0)).但基本可以用了. 代码分两个部分.主界面和遮挡屏幕界面.主界面设置完时间后调用遮挡屏幕界面. 1.主界面(设置 工作时间 ...
- 使用Ambari快速部署Hadoop大数据环境
使用Ambari快速部署Hadoop大数据环境 发布于2013-5-24 前言 做大数据相关的后端开发工作一年多来,随着Hadoop社区的不断发展,也在不断尝试新的东西,本文着重来讲解下Amb ...
- shell命令批量杀死MySQL连接进程
(1)将全部的MySQL连接进程杀掉 for i in `mysql -uroot -pzhangyun -Bse "show processlist" | grep -v &qu ...
- 最近调试HEVC中码率控制, 发现HM里面一个重大bug
最近调试HEVC中码率控制, 发现里面一个重大bug! 码率控制中有这么一个函数: Int TEncRCGOP::xEstGOPTargetBits( TEncRCSeq* encRCSeq, Int ...
- JPush极光推送 Java调用服务器端API开发
极光推送是:使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动,从而有效地提高留存率,提升用户体验.简单的说就是通过JPush后台管理网站进行app消息的推送.可以让用户及时 ...
- php中页面跳转部分方法论述
假设当前页面:http://localhost:80/index.php 1.include echo “include t1.php”; 跳转后,url地址栏http://localhost:80/ ...