HDU 5094 Maze (状压)
加一个维度,钥匙的状态,状压一下。n很小,钥匙也只有10个,bfs就好了。
忘了数组初始化。以后坚决不犯这种低级错误。
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn = +;
int g[maxn][maxn][];
int k[maxn][maxn];
int dx[] = {,-,,};
int dy[] = {,,,-};
int dir[] = { ,,-,, }; struct node
{
int x,y,step;
int s;
node(int X = , int Y = ,int S = ,int Step = ) {
x = X; y =Y; s = S; step = Step;
}
};
int n,m,p;
bool vis[maxn][maxn][+];
queue<node> q;
int tx,ty; int bfs()
{
memset(vis,,sizeof(vis));
while(q.size()) q.pop();
node u(,,k[][],);
q.push(u);
while(q.size()){
u = q.front();q.pop();
if(u.x == tx && u.y == ty) {return u.step;}
for(int i = ; i < ; i++){
if( g[u.x][u.y][i] == - || u.s&(<<g[u.x][u.y][i])){
int nx = u.x+dx[i], ny = u.y+dy[i], ns = u.s|k[nx][ny];
if(<=nx&&nx<=n&&<=ny&&ny<=m&&!vis[nx][ny][ns>>]){
vis[nx][ny][ns>>] = ;
q.push(node(nx,ny,ns,u.step+));//+(g[u.x][u.y][i]!=-1)
}
}
}
}
return -;
} int main()
{
//freopen("E_in.txt","r",stdin);
//freopen("E_out.txt","w",stdout);
while(scanf("%d%d%d",&n,&m,&p) == ){
int K;
scanf("%d",&K);
memset(g,-,sizeof(g));
for(int i = ; i < K; i++){
int x1,x2,y1,y2,tp;
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&tp);
int Dir = dir[((y2-y1+)<<)+x2-x1];
g[x1][y1][Dir] = tp;
g[x2][y2][Dir^] = tp;
}
int S;
memset(k,,sizeof(k));
scanf("%d",&S);
for(int i = ; i < S; i++){
int x0,y0,tp;
scanf("%d%d%d",&x0,&y0,&tp);
if(tp)
k[x0][y0] |= <<tp;
}
tx = n; ty = m;
int ans = bfs();
printf("%d\n",ans);
}
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+状压)
题意: n*m的迷宫.多多要从(1,1)到达(n,m).每移动一步消耗1秒.有P种钥匙. 有K个门或墙.给出K个信息:x1,y1,x2,y2,gi 含义是(x1,y1)与(x2,y2)之间有gi ...
- HDU 4284Travel(状压DP)
HDU 4284 Travel 有N个城市,M条边和H个这个人(PP)必须要去的城市,在每个城市里他都必须要“打工”,打工需要花费Di,可以挣到Ci,每条边有一个花费,现在求PP可不可以从起点1 ...
- hdu 2209 bfs+状压
http://acm.hdu.edu.cn/showproblem.php?pid=2209 不知为啥有种直觉.会出状压+搜索的题,刷几道先 简单的BFS.状压表示牌的状态, //#pragma co ...
- hdu 5025 bfs+状压
http://acm.hdu.edu.cn/showproblem.php?pid=5025 N*N矩阵 M个钥匙 K起点,T终点,S点需多花费1点且只需要一次,1-9表示9把钥匙,只有当前有I号钥匙 ...
- HDU 4336 容斥原理 || 状压DP
状压DP :F(S)=Sum*F(S)+p(x1)*F(S^(1<<x1))+p(x2)*F(S^(1<<x2))...+1; F(S)表示取状态为S的牌的期望次数,Sum表示 ...
- 拯救大兵瑞恩 HDU - 4845(状压bfs || 分层最短路)
1.状压bfs 这个状压体现在key上 我i们用把key状压一下 就能记录到一个点时 已经拥有的key的种类 ban[x1][y1][x2][y1]记录两个点之间的状态 是门 还是墙 还是啥都没有 ...
- HDU - 5117 Fluorescent(状压dp+思维)
原题链接 题意 有N个灯和M个开关,每个开关控制着一些灯,如果按下某个开关,就会让对应的灯切换状态:问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和. 思路1.首先注意到N< ...
- hdu 1429 bfs+状压
题意:这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方.刚开始 Ignatius被关在(sx,sy)的位置,离开地牢的门 ...
随机推荐
- js基础(补10.10)
1.内嵌式: <html> <head> <title></title> </head> <body> <a href=& ...
- iOS横屏设置的几种方式
1.界面旋转,MainScreen的宽高不变,键盘位置不变 CGFloat duration = [UIApplication sharedApplication].statusBarOrientat ...
- uoj#402. 【CTSC2018】混合果汁(主席树+二分)
传送门 我们先把果汁按照美味度排序,枚举\(d\),那么肯定是贪心的选择美味程度不小于\(d\)的且最便宜的果汁 发现\(d\)可以二分,那么在主席树上二分就可以了 据说还有整体二分的大佬然而我并不会 ...
- 笔记-JavaWeb学习之旅14
JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...
- 深入浅出面向对象分析与设计读书笔记一&吉他搜索案例&吉他特性锚点集中&委托&重用&业务阶段&需求列表&用例
案例:吉他搜索Guitar Inventory GuitarSpec需求变化:增加吉他弦数特性原始程序需要的变化: 1.修改GuitarSpec,构造,成员,getter 2.修改Guitar,构造, ...
- Sql Server常用函数及技巧
使用Sql Server好长时间了,今天特别想总结一下,算是回顾吧! 总结: 其实很多技巧,都是基于SQL Server自带的System Views,System Stored Procedures ...
- JQuery入门一
1.为什么要用jquery? 写起来简单,省事,开发效率高,兼容性好 2.什么是jQuery? jQuery是一个兼容多浏览器的JavaScript库 3.如何使用jQuery? 1.导入 <s ...
- 前端CSS(2)
前段基础css(2) 一.标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web网页的制作,是个“流”,从上而下,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画. 标 ...
- net core WebApi 使用Swagger
Asp.net core WebApi 使用Swagger生成帮助页 最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core ...
- 037 Sudoku Solver 解数独
写一个程序通过填充空格来解决数独.空格用 '.' 表示. 详见:https://leetcode.com/problems/sudoku-solver/description/ class Solut ...