hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】
同样题目:
题意:中文的,自己看
分析:题目是求最少的逃亡时间。确定用BFS
这个题目的难点在于有几个锁对于几把钥匙。唯一的相应关系,不能用直接的标记法,由于一个图可能须要搜索多次。
细致分析的话会发现。图的搜索次数是和钥匙的出现次数相关,那么我们能够用二进制的0 和 1 来表示第几把钥匙出现过没有。所以我们能够用状态压缩来标记那个钥匙出现过,然后用三维标记,第三维表示出现几个钥匙了的情况下图的点的搜索情况。其它就和简单的一样。
AC代码:
- #include <cstdio>
- #include<iostream>
- #include <queue>
- #include <cstring>
- using namespace std;
- const int N = 25;
- char map[N][N];
- int vis[N][N][1<<11];
- struct Node
- {
- int x,y,step;
- int key;
- };
- int dx[6]={0,0,1,-1};
- int dy[6]={1,-1,0,0};
- int m,n,t;
- int BFS(Node st,Node en)
- {
- memset(vis,0,sizeof(vis));
- st.step = 0;st.key=0;
- queue<Node> q;
- q.push(st);
- Node tmp1,tmp2;
- while(!q.empty())
- {
- tmp1 = q.front();
- q.pop();
- if(tmp1.x==en.x && tmp1.y==en.y)
- return tmp1.step;
- for(int i=0;i<4;i++)
- {
- tmp2.x=tmp1.x+dx[i];
- tmp2.y=tmp1.y+dy[i];
- tmp2.step = tmp1.step+1;
- tmp2.key = tmp1.key;
- if(map[tmp2.x][tmp2.y]>='a' && map[tmp2.x][tmp2.y]<='j')
- tmp2.key = tmp2.key|(1<<(map[tmp2.x][tmp2.y]-'a'));
- if(map[tmp2.x][tmp2.y]=='*' || tmp2.step>=t)
- continue;
- if(vis[tmp2.x][tmp2.y][tmp2.key]==0 && tmp2.x>=1 && tmp2.y>=1 && tmp2.x<=m && tmp2.y<=n)
- {
- vis[tmp2.x][tmp2.y][tmp2.key]=1;
- if(map[tmp2.x][tmp2.y]>='A' && map[tmp2.x][tmp2.y]<='J')
- {
- if(tmp2.key&(1<<map[tmp2.x][tmp2.y]-'A'))
- q.push(tmp2);
- }
- else
- q.push(tmp2);
- }
- }
- }
- return -1;
- }
- int main()
- {
- //freopen("Input.txt","r",stdin);
- while(~scanf("%d%d%d",&m,&n,&t))
- {
- Node st,en;
- for(int i=1;i<=m;i++)
- {
- getchar();
- for(int j=1;j<=n;j++){
- scanf("%c",&map[i][j]);
- if(map[i][j]=='@')
- st.x=i,st.y=j;
- if(map[i][j]=='^')
- en.x=i,en.y=j;
- }
- }
- int ans=BFS(st,en);
- if(ans<t)
- printf("%d\n",ans);
- else
- puts("-1");
- }
- return 0;
- }
hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】的更多相关文章
- HDOJ 1429 胜利大逃亡(续) (bfs+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 思路分析:题目要求找出最短的逃亡路径,但是与一般的问题不同,该问题增加了门与钥匙约束条件: 考虑 ...
- hdu - 1429 胜利大逃亡(续) (bfs状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=1429 终于开始能够做状态压缩的题了,虽然这只是状态压缩里面一道很简单的题. 状态压缩就是用二进制的思想来表示状态 ...
- hdu 1429 胜利大逃亡(续) (bfs+状态压缩)
又开始刷题了 题意:略过. 分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙.状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,k ...
- hdu 1429 胜利大逃亡(续)(bfs+位压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 胜利大逃亡(续)(状态压缩bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDOJ 1429 胜利大逃亡(续)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDU 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1429 胜利大逃亡(续)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...
随机推荐
- linux rar 解压忽略带密码压缩包
#解压忽略密码 rar x -p- file.rar #解压忽略子目录 rar x -ep file.rar
- H5图片上传、压缩
1.注册input file标签的onchange事件: 2.检查图片格式: 3.检查图片大小: 4.压缩图片 5.上传图片至服务器: 前端代码: document.getElementById('i ...
- SparkSql初级编程实践
1.Spark SQL 基本操作将下列 JSON 格式数据复制到 Linux 系统中,并保存命名为 employee.json.{ "id":1 , "name" ...
- vue父组件引用子组件方法显示undefined问题原因及解决方法
关于vue父组件引用子组件问题 1.首先导入子组件并且在components中定义子组件 2.引用子组件,并定义ref,ref定义的名称用于 this.$refs所调用的名称 3.调用子组件的方法 ( ...
- 2015 Multi-University Training Contest 4 hdu 5334 Virtual Participation
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- js获取当地时间并且拼接时间格式的三种方式
js获取当地时间并且拼接时间格式,在stackoverflow上有人在问,查了资料,各种方法将时间格式改成任意自己想要的样式. 1. var date = new Date(+new Date()+8 ...
- 极路由4pro(HC5962)设置阿里云DDNS
v2ex有个帖子说用Dnspod的API可以一行搞定,不过我既然买的是阿里云的域名还是想尽量用阿里云的API,感觉比较安全,另外修改解析记录后也会自动发邮件通知,所以还是调用阿里云的API吧.阿里云的 ...
- shadowOffset 具体解释
x向右为正,y向下为正 1.y<0 UILabel *label=[[UILabelalloc] initWithFrame:CGRectMake(40,40, 250,50)]; label. ...
- HTTP Status 404 - /servlet/Item/AddItemServlet
我想学习编程的人对404和500都是非常敏感非常熟悉的.在做DRP系统的时候多次遇到这两个错误,今天让我遇到他并且让我铭记他,那就是一个"/": 这是说jsp出问题了,并且找不到, ...
- dom 编程(html和xml)
html dom与xml dom关系: 什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了訪问 HTML 和 XML 文档的标准: "W3C 文档对象模型 (DOM) ...