题目链接

#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+状态压缩)的更多相关文章

  1. HDU 4845 拯救大兵瑞恩(分层图状压BFS)

    拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Sub ...

  2. HDU 1885 Key Task (BFS + 状态压缩)

    题意:给定一个n*m的矩阵,里面有门,有钥匙,有出口,问你逃出去的最短路径是多少. 析:这很明显是一个BFS,但是,里面又有其他的东西,所以我们考虑状态压缩,定义三维BFS,最后一维表示拿到钥匙的状态 ...

  3. hdu 4634 Swipe Bo bfs+状态压缩

    题目链接 状态压缩记录当前拿到了哪些钥匙, 然后暴力搜索. 搞了好几个小时, 一开始也不知道哪里错了, 最后A了也不知道一开始哪里有问题. #include <iostream> #inc ...

  4. HDU 3247 Resource Archiver (AC自己主动机 + BFS + 状态压缩DP)

    题目链接:Resource Archiver 解析:n个正常的串.m个病毒串,问包括全部正常串(可重叠)且不包括不论什么病毒串的字符串的最小长度为多少. AC自己主动机 + bfs + 状态压缩DP ...

  5. BFS+状态压缩 hdu-1885-Key Task

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1885 题目意思: 给一个矩阵,给一个起点多个终点,有些点有墙不能通过,有些点的位置有门,需要拿到相应 ...

  6. ACM/ICPC 之 BFS+状态压缩(POJ1324(ZOJ1361))

    求一条蛇到(1,1)的最短路长,题目不简单,状态较多,需要考虑状态压缩,ZOJ的数据似乎比POj弱一些 POJ1324(ZOJ1361)-Holedox Moving 题意:一条已知初始状态的蛇,求其 ...

  7. HDU1429+bfs+状态压缩

    bfs+状态压缩思路:用2进制表示每个钥匙是否已经被找到.. /* bfs+状态压缩 思路:用2进制表示每个钥匙是否已经被找到. */ #include<algorithm> #inclu ...

  8. hdu 5025 Saving Tang Monk 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...

  9. 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 ...

随机推荐

  1. 高通Camera驱动分析【转】

    本文转载自:http://blog.csdn.net/liwei16611/article/details/53955711 1.Sensor slave配置 结构体msm_camera_sensor ...

  2. java执行系统命令, 返回执行结果

    package com.geostar.gfstack.opinion.util; import java.io.BufferedReader; import java.io.Closeable; i ...

  3. python 调用C++ DLL,传递int,char,char*,数组和多维数组

    ctypes 数据类型和 C数据类型 对照表 ctypes type C type Python type c_bool _Bool bool (1) c_char char 1-character ...

  4. Gradel 多渠道打包 代码混淆

    http://blog.csdn.net/ttccaaa/article/details/47687241 http://www.bubuko.com/infodetail-987756.html h ...

  5. 监测工具dstat使用说明

    参考地址: https://blog.csdn.net/sinat_34789167/article/details/80986709

  6. astype()函数

    1astype()函数可用于转化dateframe某一列的数据类型 如下将dateframe某列的str类型转为int,注意astype()没有replace=True的用法,想要在原数据上修改,要写 ...

  7. 06 使用bbed修复update的数据--01

    场景1 表t3 SQL> select * from t3; ID NAME ---------- -------------------- aaa bbbb SQL> update t3 ...

  8. 5分钟连续出现某现象+微信模板消息提醒 PHP

    需求场景:用电插座电流连续出现5次电流过高(大于 3A)后停止用电服务,前四次发送电流过高提醒,最后一次发送结束用电服务提醒 思路: Redis  key 设为:插座编号+user户编号  value ...

  9. clinical-逻辑核查数据的操作

    1. 前端页面样式 2. 前端代码 添加: 展示: 修改 删除 3. 后台代码 封装的DAO类数据 # coding: utf-8 from pdform.services.db.dbCore imp ...

  10. PyTorch笔记之 Dataset 和 Dataloader

    一.简介 在 PyTorch 中,我们的数据集往往会用一个类去表示,在训练时用 Dataloader 产生一个 batch 的数据 https://pytorch.org/tutorials/begi ...