……就是爬管道……

还好内存给的多……

不然就不会做了……

#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int inf=(1<<31)-1;
int dp[51][51][1<<10];
int road[51][51][51][51];
int key[51][51];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int n,m,ans;
struct node
{
int x,y,k,step;
node(){}
node(int a,int b,int c,int d){x=a;y=b;k=c;step=d;}
};
bool isin(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m;
}
void bfs()
{
int i;
node now,next;
queue<node>qq;
qq.push(node(1,1,key[1][1],0));
memset(dp,-1,sizeof(dp));
while(qq.size())
{
now=qq.front();
qq.pop();
dp[now.x][now.y][now.k]=now.step;
for(i=0;i<4;i++)
{
next=now;
next.x+=dx[i];
next.y+=dy[i];
next.k|=key[next.x][next.y];
next.step++;
if(!isin(next.x,next.y))
continue;
if(road[now.x][now.y][next.x][next.y]==0)
continue;
if(next.x==n&&next.y==m)
{
ans=min(ans,next.step);
continue;
}
if(road[now.x][now.y][next.x][next.y]>0)
{
if(!((next.k>>road[now.x][now.y][next.x][next.y]-1)&1))
continue;
}
if(dp[next.x][next.y][next.k]!=-1)
{
if(next.step>=dp[next.x][next.y][next.k])
continue;
}
qq.push(next);
}
}
}
int main()
{
int p,sx,sy,ex,ey,t,k,x,y;
while(cin>>n>>m>>p)
{
memset(road,-1,sizeof(road));
cin>>t;
while(t--)
{
cin>>sx>>sy>>ex>>ey>>k;
road[sx][sy][ex][ey]=k;
road[ex][ey][sx][sy]=k;
}
cin>>t;
memset(key,0,sizeof(key));
while(t--)
{
cin>>x>>y>>k;
key[x][y]|=1<<k-1;
}
ans=inf;
bfs();
if(ans==inf)
ans=-1;
cout<<ans<<endl;
}
}

Maze

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others)

Total Submission(s): 329    Accepted Submission(s): 125

Problem Description
This story happened on the background of Star Trek.



Spock, the deputy captain of Starship Enterprise, fell into Klingon’s trick and was held as prisoner on their mother planet Qo’noS.



The captain of Enterprise, James T. Kirk, had to fly to Qo’noS to rescue his deputy. Fortunately, he stole a map of the maze where Spock was put in exactly.



The maze is a rectangle, which has n rows vertically and m columns horizontally, in another words, that it is divided into n*m locations. An ordered pair (Row No., Column No.) represents a location in the maze. Kirk moves from current location to next costs
1 second. And he is able to move to next location if and only if:



Next location is adjacent to current Kirk’s location on up or down or left or right(4 directions)

Open door is passable, but locked door is not.

Kirk cannot pass a wall



There are p types of doors which are locked by default. A key is only capable of opening the same type of doors. Kirk has to get the key before opening corresponding doors, which wastes little time.



Initial location of Kirk was (1, 1) while Spock was on location of (n, m). Your task is to help Kirk find Spock as soon as possible.
 
Input
The input contains many test cases.



Each test case consists of several lines. Three integers are in the first line, which represent n, m and p respectively (1<= n, m <=50, 0<= p <=10).


Only one integer k is listed in the second line, means the sum number of gates and walls, (0<= k <=500).



There are 5 integers in the following k lines, represents xi1, yi1, xi2, yi2, gi; when gi >=1, represents there is a gate of type gi between location (xi1, yi1) and (xi2,
yi2); when gi = 0, represents there is a wall between location (xi1, yi1) and (xi2, yi2), ( | xi1 - xi2 | + | yi1 - yi2 |=1, 0<= gi <=p
)



Following line is an integer S, represent the total number of keys in maze. (0<= S <=50).



There are three integers in the following S lines, represents xi1, yi1 and qi respectively. That means the key type of qi locates on location (xi1, yi1), (1<= qi<=p).
 
Output
Output the possible minimal second that Kirk could reach Spock.




If there is no possible plan, output -1.
 
Sample Input
4 4 9
9
1 2 1 3 2
1 2 2 2 0
2 1 2 2 0
2 1 3 1 0
2 3 3 3 0
2 4 3 4 1
3 2 3 3 0
3 3 4 3 0
4 3 4 4 0
2
2 1 2
4 2 1
 
Sample Output
14
 
Source

hdu5094 Maze的更多相关文章

  1. Backtracking algorithm: rat in maze

    Sept. 10, 2015 Study again the back tracking algorithm using recursive solution, rat in maze, a clas ...

  2. (期望)A Dangerous Maze(Light OJ 1027)

    http://www.lightoj.com/volume_showproblem.php?problem=1027 You are in a maze; seeing n doors in fron ...

  3. 1204. Maze Traversal

    1204.   Maze Traversal A common problem in artificial intelligence is negotiation of a maze. A maze ...

  4. uva705--slash maze

    /*这道题我原本是将斜线迷宫扩大为原来的两倍,但是在这种情况下对于在斜的方向上的搜索会变的较容易出错,所以参考了别人的思路后将迷宫扩展为原来的3倍,这样就变成一般的迷宫问题了*/ #include&q ...

  5. HDU 4048 Zhuge Liang's Stone Sentinel Maze

    Zhuge Liang's Stone Sentinel Maze Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/327 ...

  6. Borg Maze(MST & bfs)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9220   Accepted: 3087 Descrip ...

  7. poj 3026 bfs+prim Borg Maze

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9718   Accepted: 3263 Description The B ...

  8. HDU 4035:Maze(概率DP)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=4035 Maze Special Judge Problem Description   When w ...

  9. POJ 3026 : Borg Maze(BFS + Prim)

    http://poj.org/problem?id=3026 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

随机推荐

  1. HDU 4502 吉哥系列故事——临时工计划(一维动态规划)

    题意:吉哥的假期是1到n天,然后有m个工作可以让吉哥选择做,每个工作都有一个开始 t_s  和结束的时间   t_e ,都用天来表示,然后每个工作必须从第一天做到最后一天, 从头到尾做完之后就可以得到 ...

  2. 第5月第24天 线性变换 opengl

    1. http://news.qiyeku.com/news_837979.html 2. opengl + (Class)layerClass { return [CAEAGLLayer class ...

  3. import和require的区别

    node编程中最重要的思想就是模块化,import和require都是被模块化所使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转 ...

  4. Redis持久化——AOF

    一.是什么? AOF是以日志的形式来记录每个写操作,将Redis执行过的所有写操作记录下来(读操作不做记录),只许追加文件不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis ...

  5. Mycat 配置及优化【转】

    前言 Mycat 是一个数据库分库分表中间件 MyCAT 是作为通用代理设计的,后端是以 Mysql协议 和 JDBC 的方式连接数据库,可以支持 Oracle.DB2.SQL Server . mo ...

  6. elasticsearch安装ik分词器(极速版)

    简介:下面讲有我已经打包并且编辑过的zip包,你可以在下面下载即可. 1.下载zip包.elasticsearch-analysis-ik-1.8.0.jar下面有附件链接[ik-安装包.zip],下 ...

  7. React-Native 之 Navigator与NavigatorIOS使用

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  8. enum 关键字

    java.lang.Enum.java enum :枚举类型当你需要创建一个整型常量集,但是这些枚举值并不会必然地将其自身的取值限制在这个常量的范围之内,这种情况可以用枚举 package objec ...

  9. POJ 3666 Making the Grade(二维DP)

    题目链接:http://poj.org/problem?id=3666 题目大意:给出长度为n的整数数列,每次可以将一个数加1或者减1,最少要多少次可以将其变成单调不降或者单调不增(题目BUG,只能求 ...

  10. 【LOJ】#2109. 「JLOI2015」骗我呢

    题解 我深思熟虑许久才算是明白个大概的计数问题吧 先是转化成一个矩形,列一条直线y = x,y = x - (m + 1)我们从(0,0)走到(n + m + 1,m + 1)就是答案 因为我们起始相 ...