状压BFS

注意在用二维字符数组时,要把空格、换行处理好。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
int sx,sy,C,n,m;
int ans;
bool vis[][][<<];
char g[][];
int key[][];
int dx[]={,,-,},dy[]={,,,-};
bool check(int a,int b){return <=a&&a<=n&&<=b&&b<=m;}
bool ok(int mask)
{
for(int i=;i<=C;i++)
if(mask&(<<i));
else return false;
return true;
}
struct mask
{
int x,y,key,step;
mask(int x,int y,int key,int step):x(x),y(y),key(key),step(step){};
};
queue<mask>q;
int bfs()
{//printf("%d %d",sx,sy);
while(q.size())q.pop();
memset(vis,false,sizeof(vis));
q.push(mask(sx,sy,,));
vis[sx][sy][]=true;
while(q.size())
{
mask tmp=q.front();q.pop();//printf("%d %d %d\n",tmp.x,tmp.y,tmp.key);
if(ok(tmp.key))
ans=min(ans,tmp.step);
for(int i=;i<;i++)
{
int nx=tmp.x+dx[i];
int ny=tmp.y+dy[i];
int nkey=tmp.key;//printf("%d %d\n",nx,ny);
if(check(nx,ny)&&!vis[nx][ny][nkey]&&g[nx][ny]!='#')
{
if(key[nx][ny])
nkey|=key[nx][ny];
vis[nx][ny][nkey]=true;
q.push(mask(nx,ny,nkey,tmp.step+));
}
}
}
return ans==INF?-:ans;
}
int main()
{
while(~scanf("%d %d",&n,&m)){
getchar();//这里的getchar()吸收掉换行,刚刚没注意这里WA后,想了半个钟,可恨啊。。。。
if(n==&&m==)break;
ans=INF;
memset(key,,sizeof(key));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%c",&g[i][j]);
if(g[i][j]=='@')
{
sx=i;
sy=j;
}
}
getchar();
}
/* for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
printf("%c",g[i][j]);
printf("\n");
}*/
scanf("%d",&C);
int a,b;
for(int i=;i<=C;i++)
{
scanf("%d %d",&a,&b);
key[a][b]=<<i;
}
printf("%d\n",bfs());
}
}

HDU Stealing Harry Potter's Precious(状压BFS)的更多相关文章

  1. HDU 4012 Paint on a Wall(状压+bfs)

    Paint on a Wall Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) ...

  2. HDU 4771 Stealing Harry Potter's Precious

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  3. HDU 4771 Stealing Harry Potter's Precious (2013杭州赛区1002题,bfs,状态压缩)

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  4. HDU 4771 Stealing Harry Potter's Precious dfs+bfs

    Stealing Harry Potter's Precious Problem Description Harry Potter has some precious. For example, hi ...

  5. 拯救大兵瑞恩 HDU - 4845(状压bfs || 分层最短路)

    1.状压bfs 这个状压体现在key上  我i们用把key状压一下  就能记录到一个点时 已经拥有的key的种类 ban[x1][y1][x2][y1]记录两个点之间的状态 是门 还是墙 还是啥都没有 ...

  6. POJ 1324 Holedox Moving (状压BFS)

    POJ 1324 Holedox Moving (状压BFS) Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 18091 Acc ...

  7. P2622 关灯问题II(状压bfs)

    P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j] ...

  8. 状压BFS

    ​题意:1个机器人找几个垃圾,求出最短路径. 状压BFS,这道题不能用普通BFS二维vis标记数组去标记走过的路径,因为这题是可以往回走的,而且你也不能只记录垃圾的数量就可以了,因为它有可能重复走同一 ...

  9. 【HDU 4771 Stealing Harry Potter's Precious】BFS+状压

    2013杭州区域赛现场赛二水... 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间. 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点, ...

随机推荐

  1. VUE CLI3.X 创建项目

    Node.js环境搭建 Node.js基于V8引擎,可以让js代码脱离浏览器运行 Vue CLI3.0 需要Node.js 8.9或者更高版本. 用nvm或者nvm-windows在同一台电脑中管理多 ...

  2. sqli(7)

    前言 第7关 导出文件GET字符型注入 步骤OK,但是就是不能写入文件,不知是文件夹的问题还是自己操作的问题.但是确实,没有导入成功. 1. 查看闭合,看源码,发现闭合是((‘ ’)): 2.查看所在 ...

  3. linux--基础知识1

    #进入终端窗口,root命令提示符#,普通用户登陆提示符$,切换终端用户 ctrl+shift+F2,退出终端命令exit #init 0 关机  reboot 重启  ls查看当前目录下文件  ls ...

  4. linux系统升级openssh

    一.升级前准备工作 安装openssh过程需gcc,zlib-devel,openssl-devel,等编译环境,如果通过rpm包来安装,需要解决各种依赖包,故配置本地yum源解决依赖问题. 1. 配 ...

  5. 【技巧】Windows 10 1809无法接收1903解决方法

    这都7月份了,Windows10 1903都升级的有一个月了,然而我的1809的系统一直找不到1903的更新. 虽说1903会有bug,但还是想体验一把.周围同事都更新了,心里还是痒痒的. 于是每天都 ...

  6. golang test模块

    1 创建文件夹testing101 2 被测试程序 package testing101 func Sum(numbers []int) int { sum :=0 for _,n :=range n ...

  7. 向Hive中导入数据的方式

    一.Hive客户端:根据数据源不同划分 1.从本地文件系统中导入数据到hive表中: load data local inpath "path" [OVERWRITE] into ...

  8. 【leetcode】1026. Maximum Difference Between Node and Ancestor

    题目如下: Given the root of a binary tree, find the maximum value V for which there exists different nod ...

  9. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 I. Reversion Count (java大数)

    Description: There is a positive integer X, X's reversion count is Y. For example, X=123, Y=321; X=1 ...

  10. [CF846C]Four Segments题解

    我们暴力枚举一下\(delim_{1}\) 然后对于每个\(delim_{1}\),O(n)扫一遍+前缀和求出最大\(delim_{0}\)和\(delim_{2}\),然后记录一下它们的位置就行啦 ...