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 ...
随机推荐
- 如何利用EDM邮件营销进行持续推销
一般来说,一个电子商务网站的转化率在2%左右是正常的.这也意味着其他98%的潜在客户并不会购买任何东西,并且可能再也不回来了.这个时候,如何利用EDM邮件营销进行持续推销呢? 首先,EDM邮件营销可以 ...
- 从 2017 OpenStack Days China 看国内云计算的发展现状
目录 目录 China Runs On OpenStack 私有云正式迈入成熟阶段 混合云的前夜已经来临 China Runs On OpenStack OpenStack Days China 作为 ...
- http://blog.csdn.net/sdksdk0/article/details/50749326
http://blog.csdn.net/sdksdk0/article/details/50749326
- layui的分页使用(前端分页)
<div id="one"></div>//显示数据库中数据的<ul id="ones"></ul>//显示分页 ...
- 优化内存_内存泄漏——C
内存泄漏: 动态申请内存,没有正常释放,后续又申请内存,也没释放内存,导致内存池被全部被占用,最终再申请内存的时候失败:严格点则每次申请内存的时候判断申请到的指针是否为空,若为空NULL则表示申请失 ...
- 加密算法:DES、AES等
指标:运算速度.安全性.资源消耗 对称加密算法(加解密密钥相同): 非对称算法(加密密钥和解密密钥不同): 散列算法比较: 对称与非对称算法比较: 算法选择(从性能和安全性综合) 对称加密: AES( ...
- jsp自定义标签处理转义字符
sun公司提供的jstl虽然比较强大,但是开发中很难满足我们所有的需求,并且开发也禁止在jsp中写很多java代码,因此很多场景需要自己定义标签进行项目开发 sun提供的标签库引用方式:<%@t ...
- HDU 6697 Closest Pair of Segments(线段距离)
首先最容易想到的就是N2暴力枚举所有线段去找最小值,但是这样会做了许多无用功.我们可以先对线段排序,使得线段最左侧的端点按照x轴y轴排序,然后我们可以限定在这个线段的矩形框内的所有线段才有可能产生最小 ...
- 小白学Python(16)——pyecharts 绘制地理图表 Geo
Geo-基本示例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...
- Codeforces - 1198D - Rectangle Painting 1 - dp
https://codeforces.com/contest/1198/problem/D 原来是dp的思路,而且是每次切成两半向下递归.好像在哪里见过类似的,貌似是紫书的样子. 再想想好像就很显然的 ...