hdu 1548 A strange lift(最短路)
2016-06-20 20:08
330 查看
题目大意:
思路:
思路:
/* hdu 1548 A strange lift 题目大意:这是一个奇怪的楼梯。你可以停在任何你想停的一层…… 如果你在第i层,这一层有个值Ki,按了“UP”,你就上升Ki层, 即到了i+Ki层,“DOWN”就是减,同“UP” A到B至少需要多少次操作,无法到达就输出-1 思路:bfs求最短路,使用队列 */ #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; int k[205];// int vis[205];//标记是否走过 int bfs[205]; int main() { int n,a,b; while(~scanf("%d%d%d",&n,&a,&b)&&n) { int flag=0; for(int i=1;i<=n;i++) scanf("%d",&k[i]); memset(vis,0,sizeof(vis));//清 memset(bfs,0,sizeof(bfs)); queue<int>p; p.push(a); vis[a]=1;//标记已经走过,如果回到已经走过的地方,相当于还是没走哈 //所以就肯定不是最短路径了 while(!p.empty())//非空的时候 { int pr=p.front(); p.pop(); if(pr==b)//已经到目的地的话 { flag=1; break; } int x =pr+k[pr]; if(x>=1&&x<=n&&vis[x]==0)//并且还未走过 { vis[x]=1;//标记走过 p.push(x); bfs[x]=bfs[pr]+1; } x =pr-k[pr]; if(x>=1&&x<=n&&vis[x]==0) { vis[x]=1; p.push(x); bfs[x]=bfs[pr]+1; } } if(flag) printf("%d\n",bfs[b]); else printf("-1\n"); } return 0; }
相关文章推荐
- android 开发Handler源码剖析
- 再谈vertical-align与line-height
- 关于视频格式S-Video、component、composite的区别
- OC基础:协议Protocol
- OpenCL在kernal文件中加入第三方头文件等
- 设计模式之代理模式
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- 菜鸟学android之二--OnClickListener的三种实现方法 ,acticity之间的传值,数值格式化(附实例:计算BMI数值)
- SpringMVC学习--文件上传
- Spring事务学习记录
- cvMinMaxLoc
- MPR在旋转轴线时图像周围出现灰色边界的解决方法
- 13集中器模块特性
- 学会这些, 让你的服务器远离攻击影响
- 【drp 11】使用Junit简单测试接口方法
- June 11th 模拟赛B T1 刺杀大使 Solution
- 如何高效的进行编程练习
- 【drp 11】使用Junit简单测试接口方法
- NodeMCU文档中文翻译 4 烧写固件
- 梦断代码阅读笔记03