HDU Stealing Harry Potter's Precious(状压BFS)
状压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)的更多相关文章
- 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) ...
- HDU 4771 Stealing Harry Potter's Precious
Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 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 ...
- HDU 4771 Stealing Harry Potter's Precious dfs+bfs
Stealing Harry Potter's Precious Problem Description Harry Potter has some precious. For example, hi ...
- 拯救大兵瑞恩 HDU - 4845(状压bfs || 分层最短路)
1.状压bfs 这个状压体现在key上 我i们用把key状压一下 就能记录到一个点时 已经拥有的key的种类 ban[x1][y1][x2][y1]记录两个点之间的状态 是门 还是墙 还是啥都没有 ...
- POJ 1324 Holedox Moving (状压BFS)
POJ 1324 Holedox Moving (状压BFS) Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 18091 Acc ...
- P2622 关灯问题II(状压bfs)
P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j] ...
- 状压BFS
题意:1个机器人找几个垃圾,求出最短路径. 状压BFS,这道题不能用普通BFS二维vis标记数组去标记走过的路径,因为这题是可以往回走的,而且你也不能只记录垃圾的数量就可以了,因为它有可能重复走同一 ...
- 【HDU 4771 Stealing Harry Potter's Precious】BFS+状压
2013杭州区域赛现场赛二水... 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间. 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点, ...
随机推荐
- 彻底解决mysql报错:1030, 'Got error 28 from storage engine'
权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/harry5508/article/deta ...
- Monument Tour(以前月赛卡住的签到题,今天突然想起拿出来补一补
https://oj.neu.edu.cn/problem/1501 题意:给你矩阵大小和上面的一些点,要你从左到右从一条主路穿过,并且访问这些点,问最短总路线长度. 思路:一开始对于一个点我只算了一 ...
- shell 数组中 @ 跟 * 的区别
关于在shell脚本中数组变量中 “*”跟 “@” 区别 “*”当变量加上“” 会当成一串字符串处理. “@”变量加上“” 依然当做数组处理. 在没有加上“” 的情况下 效果是等效的. #!/bin/ ...
- AOP技术介绍--(引言)
软件设计因为引入面向对象思想而逐渐变得丰富起来.“一切皆为对象”的精义,使得程序世界所要处理的逻辑简化,开发者可以用一组对象以及这些对象之间的关系将软件系统形象地表示出来.而从对象的定义,进而到模块, ...
- Linux下统计当前文件夹下的文件个数
Linux下统计当前文件夹下的文件个数 √ ls -l |grep "^-"|wc -l
- LocalDateTime用法(jdk1.8 )
前言 最近看别人项目源码,发现Java8新的日期时间API很方便强大,所以转载该入门介绍博客,记录一下. 使用新时间日期API的必要性 在java8以前,或许: 当你在做有关时间日期的操作时,你会想到 ...
- Java IO方式
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11444349.html BIO 传统的java.io包,它基于流模型实现,提供了我们最熟知的一些IO功 ...
- 【leetcode】1035. Uncrossed Lines
题目如下: We write the integers of A and B (in the order they are given) on two separate horizontal line ...
- Django的使用一
Django是一个由Python写成的Web应用框架,是 Python 社区的两大最受欢迎的 Web 框架之一(另一个是 Flask). Django的主要目的是简便.快速的开发数据库驱动的网站. 1 ...
- Xcode模拟器快捷键
command + 左右 = 横竖屏旋转 command + H + H = 切入层级后台模式