题目意思:说有一个人在(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(水搜索)的更多相关文章

  1. hdu 5094 Maze 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...

  2. HDU 5094 --Maze【BFS &amp;&amp; 状态压缩】

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Sub ...

  3. HDU - 5094 Maze(状压+bfs)

    Maze This story happened on the background of Star Trek. Spock, the deputy captain of Starship Enter ...

  4. hdu 5094 Maze bfs

    传送门:上海邀请赛E 给定一个n×m的迷宫,给出相邻格子之间的墙或者门的信息,墙说明不可走,假设是门则须要有相应的钥匙才干通过,问是否可以从(1,1)到达(n,m) 一个带状态的bfs,再另记一个状态 ...

  5. HDU 5094 Maze (状压)

    加一个维度,钥匙的状态,状压一下.n很小,钥匙也只有10个,bfs就好了. 忘了数组初始化.以后坚决不犯这种低级错误. #include<cstdio> #include<queue ...

  6. hdu 5094 Maze (BFS+状压)

    题意: n*m的迷宫.多多要从(1,1)到达(n,m).每移动一步消耗1秒.有P种钥匙. 有K个门或墙.给出K个信息:x1,y1,x2,y2,gi    含义是(x1,y1)与(x2,y2)之间有gi ...

  7. hdu5012 水搜索

    题意:       给你一个正方体的初始状态和末状态,问你是否可以再6步之内转到这个状态,有四种转的方式,如果你面对的是正方向的正前方,那么转的方式就是 顺时针,逆时针,上,下. 思路:        ...

  8. HDU 4035 Maze 概率DP 搜索

    解题报告链接: http://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html 先推公式,设计状态,令DP[i]表示在房间i退出要走步数 ...

  9. hdu 2181 水搜索

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. lightoj 1179(线段树)

    传送门:Josephus Problem 题意:经典约瑟夫问题,有n个人,每次数到第k个人出列,求剩下的最后一人. 分析:用线段树模拟约瑟夫问题,记录区间的减少情况,然后根据每次数到的人在区间排第几位 ...

  2. nginx &amp; flup &amp; django &amp; python3.x @ window7配置备忘录

    最近考虑原Prism建筑(非职业.半专业人士认为C/S建筑)至B/S迁移,主要是由于部署问题,包括两个因素:已经做,虽然一键安装和部署的一个因素,心存顾虑,虽然我一再声明这是一个绿色软件.还有一个因素 ...

  3. HDU1789Doing Homework again(贪婪)

    HDU1789Doing Homework again(贪心) 题目链接 题目大意:给你n们作业的最后期限和过了这个期限没做须要扣的分数.问如何安排能够使得扣分最少. 解题思路:贪心,将扣分多的作业排 ...

  4. Codeforces Round #FF 446 C. DZY Loves Fibonacci Numbers

    參考:http://www.cnblogs.com/chanme/p/3843859.html 然后我看到在别人的AC的方法里还有这么一种神方法,他预先设定了一个阈值K,当当前的更新操作数j<K ...

  5. 《火球——UML大战需求分析》(第1章 大话UML)——1.3 行为型的UML(Behavior Diagram)

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  6. Effective C++:条款38:通过一个复杂的模具has-a要么“基于一些实现”

    (一) public继承是"is-a"关联,"has-a"或"依据某物实现出(is-implemented-in-terms-of)"的意思 ...

  7. JAVA 计算地球上任意两点(经纬度)距离

    /** * 计算地球上任意两点(经纬度)距离 * * @param long1 * 第一点经度 * @param lat1 * 第一点纬度 * @param long2 * 第二点经度 * @para ...

  8. HDOJ 5276 YJC tricks time multimap

    multimap的使用 YJC tricks time Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/262144 K ...

  9. IOS开发笔记 - 基于wsdl2objc调用webservice

    为了方便在ios下调用webserivce,找来了wsdl2objc这样一个开源的框架来解析webservice方便在ios下引用. 下面做个小例子. 1.首先是用Asp.net搭建一个测试的webs ...

  10. ServiceStack.Redis里List的Insert操作

    最近用Redis的c#驱动,发现ServiceStack.Redis里List类型的Insert方法调用的时候始终报错,结果反编译dll后,这个方法居然是这样写的: public void Inser ...