hdu 4845 : 拯救大兵瑞恩 (bfs+状态压缩)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL; int n,m,p,s,k;
int dx[]={,,,-};
int dy[]={,-,,}; bool vis[][][<<]; //vis[i][j][k]记录是否以k状态访问过(i,j)位置
int wall[][][][]; //记录墙和门的情况
int key[][]; //记录迷宫中钥匙的存在状态 struct node
{
int x,y; //x,y记录坐标
int own; //own记录钥匙的拥有情况
int dis; //dis记录到原点的最短距离
}; bool in(int x,int y)
{
return <=x&&x<=n&&<=y&&y<=m;
} int bfs()
{
vis[][][key[][]]=;
queue<node> q;
q.push((node){,,key[][],});
while(!q.empty())
{
node cur=q.front();
q.pop();
int px=cur.x,py=cur.y,pdis=cur.dis;
for(int i=;i<;i++)
{
int own=cur.own;
int x=px+dx[i];
int y=py+dy[i];
if(!in(x,y)||wall[px][py][x][y]==) continue; //不在边界内或是一堵墙
int door= (wall[px][py][x][y]==-? :wall[px][py][x][y]);
if(!(own&(<<door))) continue; //没有钥匙
if(x==n&&y==m) return pdis+; //到达终点
own|=key[x][y]; //捡到该点的钥匙
if(vis[x][y][own]) continue;
vis[x][y][own]=;
q.push((node){x,y,own,pdis+});
}
}
return -;
} int main()
{
while(cin>>n>>m>>p)
{
memset(wall,-,sizeof(wall));
memset(key,,sizeof(key));
memset(vis,,sizeof(vis));
cin>>k;
while(k--)
{
int x1,y1,x2,y2,g;
cin>>x1>>y1>>x2>>y2>>g;
wall[x1][y1][x2][y2]=wall[x2][y2][x1][y1]=g;
}
cin>>s;
while(s--)
{
int x,y,q;
cin>>x>>y>>q;
key[x][y]|=<<q;
}
key[][]|=; //捡到原点的钥匙
cout<<bfs()<<endl;
}
}
hdu 4845 : 拯救大兵瑞恩 (bfs+状态压缩)的更多相关文章
- HDU 4845 拯救大兵瑞恩(分层图状压BFS)
拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Sub ...
- HDU 1885 Key Task (BFS + 状态压缩)
题意:给定一个n*m的矩阵,里面有门,有钥匙,有出口,问你逃出去的最短路径是多少. 析:这很明显是一个BFS,但是,里面又有其他的东西,所以我们考虑状态压缩,定义三维BFS,最后一维表示拿到钥匙的状态 ...
- hdu 4634 Swipe Bo bfs+状态压缩
题目链接 状态压缩记录当前拿到了哪些钥匙, 然后暴力搜索. 搞了好几个小时, 一开始也不知道哪里错了, 最后A了也不知道一开始哪里有问题. #include <iostream> #inc ...
- HDU 3247 Resource Archiver (AC自己主动机 + BFS + 状态压缩DP)
题目链接:Resource Archiver 解析:n个正常的串.m个病毒串,问包括全部正常串(可重叠)且不包括不论什么病毒串的字符串的最小长度为多少. AC自己主动机 + bfs + 状态压缩DP ...
- BFS+状态压缩 hdu-1885-Key Task
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1885 题目意思: 给一个矩阵,给一个起点多个终点,有些点有墙不能通过,有些点的位置有门,需要拿到相应 ...
- ACM/ICPC 之 BFS+状态压缩(POJ1324(ZOJ1361))
求一条蛇到(1,1)的最短路长,题目不简单,状态较多,需要考虑状态压缩,ZOJ的数据似乎比POj弱一些 POJ1324(ZOJ1361)-Holedox Moving 题意:一条已知初始状态的蛇,求其 ...
- HDU1429+bfs+状态压缩
bfs+状态压缩思路:用2进制表示每个钥匙是否已经被找到.. /* bfs+状态压缩 思路:用2进制表示每个钥匙是否已经被找到. */ #include<algorithm> #inclu ...
- hdu 5025 Saving Tang Monk 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...
- poj 1753 Flip Game(bfs状态压缩 或 dfs枚举)
Description Flip game squares. One side of each piece is white and the other one is black and each p ...
随机推荐
- optistruct线性求解一次二次单元应力位移比较
通过分析比较10mm.5mm.3mm.1mm的网格模型, 网格越细密: 位移与应力均趋于恒定值(收敛): 一次与二次单元的应力区域一致: 一次与二次单元的位移相差11.3%,一次单元的位移小. 所用的 ...
- [转]python常用的十进制、16进制、字符串、字节串之间的转换
阅读目录(Content) 整数之间的进制转换: 字符串转整数: 字节串转整数: 整数转字节串: 字符串转字节串: 字节串转字符串: 测试用的python源码 进行协议解析时,总是会遇到各种各样的数据 ...
- ASP 数据库分页
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <% Response.buffer=false %> ...
- 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第5节 String类_7_字符串的转换相关方法
sequence n.顺序:次序:一系列:一连串 v.按顺序排列:测定(整套基因或分子成分的)序列 网络连续:数列:时序 butes.fori出循环 replace Ctrl+字母N也可以打开 输入s ...
- 测开之路一百零六:bootstrap布局
可以在html的head里面加一些说明 <meta http-equiv="X-UA-Compatible" content="IE=edge">& ...
- excel实现筛选去重操作
前情提要: 做图表时,希望更新数据后能自动化更新图表,需要各种公式之间相互配合.此时的需求是,将A表中的不同用户登录的地点做一个图表统计. 1.创建透视表 以用户id和地点当做行标签制作透视表,透视表 ...
- C# picturebox 加载图片后透明显示在另一控件之上
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- python函数及调用
python的函数是一段重复多次可调用的代码,依据python的函数,我们可以利用函数式的编程,来减少代码的重复. 在本章节中,详细的介绍python的函数,以及python的函数式编程的与众不同,函 ...
- 【ABAP系列】SAP ABAP 关于ALV布局保存选项的讲解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP 关于ALV布局保存 ...
- Navicat Premium 12.1.20.0安装与激活
一.Navicat Premium 12下载 链接: https://pan.baidu.com/s/1GgNbCPGahN-Z91f4dnQkBQ 提取码: 3q8f 复制这段内容后打开百度网盘手机 ...