hdu 1429(bfs+状态压缩)
题意:容易理解,但要注意的地方是:如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败。因为这里我贡献了一次wa。
分析:仔细阅读题目之后,会发现最多的钥匙数量为10把,所以把这个作为题目的突破口,对钥匙进行状态压缩,具体看代码实现!
代码实现:
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #include<queue>
- using namespace std;
- int n,m,time,visited[][][];
- int sx,sy,ex,ey,res;
- int b[][]={{,},{,-},{,},{-,}};
- char map[][];
- struct node{
- int x;
- int y;
- int t;
- int st;
- };
- int check(int x,int y)
- {
- if(x>=&&x<=n&&y>=&&y<=m&&map[x][y]!='*')
- return ;
- else
- return ;
- }
- void bfs()
- {
- queue<node>Q;
- struct node p,temp;
- int i,j,add;
- memset(visited,,sizeof(visited));
- p.x=sx;p.y=sy;
- p.t=;p.st=;
- visited[sx][sy][]=;
- Q.push(p);
- while(!Q.empty())
- {
- p=Q.front();
- Q.pop();
- if(p.x==ex&&p.y==ey&&p.t<time)//这里要注意下,为此贡献了一次wa
- {
- res=p.t;
- return ;
- }
- if(p.t>=time)
- return ;
- for(i=;i<;i++)
- {
- temp.x=p.x+b[i][];
- temp.y=p.y+b[i][];
- temp.t=p.t+;
- temp.st=p.st;
- if(check(temp.x,temp.y))
- {
- if(map[temp.x][temp.y]>='a'&&map[temp.x][temp.y]<='j')
- {
- add=<<(map[temp.x][temp.y]-'a');
- temp.st=temp.st|add;
- if(visited[temp.x][temp.y][temp.st]==)
- {
- visited[temp.x][temp.y][temp.st]=;
- Q.push(temp);
- }
- }
- else if(map[temp.x][temp.y]>='A'&&map[temp.x][temp.y]<='J')
- {
- add=<<(map[temp.x][temp.y]-'A');
- if((temp.st&add)&&visited[temp.x][temp.y][temp.st]==)
- {
- visited[temp.x][temp.y][temp.st]=;
- Q.push(temp);
- }
- }
- else if(visited[temp.x][temp.y][temp.st]==)
- {
- visited[temp.x][temp.y][temp.st]=;
- Q.push(temp);
- }
- }
- }
- }
- }
- int main()
- {
- int i,j;
- while(scanf("%d%d%d",&n,&m,&time)!=EOF)
- {
- res=-;
- for(i=;i<=n;i++)
- {
- getchar();
- for(j=;j<=m;j++)
- {
- scanf("%c",&map[i][j]);
- if(map[i][j]=='@')
- {
- sx=i;
- sy=j;
- }
- else if(map[i][j]=='^')
- {
- ex=i;
- ey=j;
- }
- }
- }
- bfs();
- printf("%d\n",res);
- }
- return ;
- }
hdu 1429(bfs+状态压缩)的更多相关文章
- hdu 1429 (bfs+状态压缩) 胜利大逃亡续
http://acm.hdu.edu.cn/showproblem.php?pid=1429 典型的状压搜索,在普通的搜索基础上,利用二进制的特性记录钥匙与门, 二进制的每一位代表一把钥匙,比如说拿到 ...
- 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 5094 Maze 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...
- 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 ...
- BFS+状态压缩 HDU1429
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu 5724 SG+状态压缩
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
随机推荐
- RxJava+Retrofit+MVP构建的App——聚合资讯
RtfRxMVP 聚合资讯APP,提供热点资讯,天气预报以及笑话精选服务,使用 Retrofit + RxJava + MVP 构建代码. Hello U 这是我的一个练习项目,第一次尝试运用 MVP ...
- 详解TCP和UDP数据段的首部格式
TCP数据段的首部格式: 源端口号(16) 目的端口号(16) 序列号(32) 确认应答号(32) 数据偏移(4) 保留(6) 代码位(6) 窗口(16) 校验和(16) 紧急指针 选项(长度可变) ...
- swift:入门知识之类和对象
1.swift中使用class创建一个类.一个类的声明则是在类里作为常量或变量声明的,除了是在类的上下文中.在方法和函数中也是这么写的. 2.swift中使用init(...)作为初始化构造函数 3. ...
- RHEL7服务管理
对于学习过红帽RHEL6的系统或已经习惯使用service.chkconfig等命令来管理系统服务的用户可能要郁闷了, 因为在红帽RHEL7系统中管理服务的命令变成了“systemctl”,但使用方法 ...
- Android之开发杂记(一)
1.cygwin环境变量设置 可在Cygwin.bat 中设置 set NDK_ROOT=P:/android/android-ndk-r8e 或者在home\Administrator\.bash_ ...
- Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)
然后是项目下的文件:完整的项目请看 上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...
- 【首先膜拜大湿】poj-2386-Lake Counting-DFS模板题
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16802 Accepted: 8523 De ...
- HDU 4691 Front compression(后缀数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4691 题意:给出Input,求出Compressed output.输出各用多少字节. 思路:求后缀数 ...
- 单元测试之道(使用NUnit)
首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而 又忐忑的心情点击界面上 ...
- HeadFirst Jsp 06 (会话管理)
现在我们希望能够跨多个请求保留客户特定的状态. 现在, 模型中的业务只是检查请求中的参数, 并返回一个响应(建议), 应用中没有谁记得在当前请求之前与这个客户之间发生过什么. 与一个客户的整个会话期间 ...