HDU1548 A strange lift 广搜 + 最短路
来源:互联网 发布:python 文件写入变量 编辑:程序博客网 时间:2024/05/16 19:29
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548
题目大意:一个很奇怪的升降机,它有两个按钮UP和DOWN,给你一些数i表示层数,并且每层对应的Ki,如果按UP按钮,会从第i层升到第i+Ki层;如果按了DOWN则会从第i层降到第i-Ki层;并规定能到的层数为1到N,根据常识也知道。现在的要求就是给你N,A,B和一串数K1到Kn,问你从A到B,至少按几下按钮。
注意点:
1、为每走过的一层标记,以免出现每一层的Ki为0时,造成死循环;
2、如果A==B,直接输出0;
3、注意一开始是从1开始,而不是0,所以创建结构体数组时,要从0开始,否则判断队列为空时会出错。
代码:
#include <iostream>#include <cstdio>#include <queue>using namespace std;int n,st,se;int a[205];int vis[205];bool flag;struct Node {int x;int num;};void BFS(Node* node, int s, int e) {if(node == NULL || a[s] == 0 || a[s] >= n) {return;}queue<Node> Q;Q.push(node[s - 1]);while(!Q.empty()) {Node tmp = Q.front();Q.pop();if(tmp.x == e) { flag = true;printf("%d\n", tmp.num);return;}Node tmp_1, tmp_2;tmp_1.x = tmp.x + a[tmp.x];if(tmp_1.x >= 1 && tmp_1.x <= n && !vis[tmp_1.x]) { tmp_1.num = tmp.num + 1;Q.push(tmp_1);vis[tmp_1.x] = 1;} tmp_2.x = tmp.x - a[tmp.x];if(tmp_2.x >= 1 && tmp_2.x <= n && !vis[tmp_2.x]) { tmp_2.num = tmp.num + 1;Q.push(tmp_2);vis[tmp_2.x] = 1;}}}int main() {while(scanf("%d", &n), n) { flag = false;scanf("%d%d",&st,&se);int i;Node* node = new Node[n];for(i = 1; i <= n; i++) {scanf("%d", &a[i]);node[i - 1].x = i;node[i - 1].num = 0;vis[i] = 0;}if(st == se) { continue;}BFS(node, st, se);if(!flag) { printf("-1\n"); }}}
0 0
- HDU1548 A strange lift 广搜和最短路
- HDU1548 A strange lift 广搜 + 最短路
- HDU1548 A strange lift 最短路
- HDU1548-A strange lift【广搜做法】
- hdu1548 A strange lift 不错的变相最短路考察
- hdu1548 A strange lift
- HDU1548 A strange lift
- HDU1548 A strange lift
- hdu1548 A strange lift
- HDU1548---A strange lift
- hdu1548 A strange lift
- hdu1548 a strange lift
- HDU1548-A strange lift
- Hdu1548 A strange lift
- HDU1548 A strange lift
- hdu1548 A strange lift
- HDU1548 A strange lift
- HDU1548-A strange lift
- tomcat 中maxActive、maxIdle和maxWait参数解析
- sun.misc.BASE64Encoder找不到jar包的解决方法
- JavaScript Beyond the Web in 2014 http://www.sitepoint.com/javascript-beyond-web-2014/
- 布隆过滤器Python代码实现
- 【实用方法】Linux PCI/PCI-E设备配置空间读取与修改
- HDU1548 A strange lift 广搜 + 最短路
- Hibernate的HQL支持数据库convert函数
- __forceinline, inline,__inline的详细说明
- 黑马程序员——Java集合框架(3)
- configure: error: C++ compiler cannot create execut
- windows 2008 iso制作
- C语言的预编译
- Mac OS X下绑定80端口
- SVN Attempted to lock an already-locked dir