搜索—Problem_1013&1014-A strange lift
来源:互联网 发布:软件如何防卸载 编辑:程序博客网 时间:2024/06/06 19:44
8 搜索—Problem_1013&1014-A strange lift
题意
电梯每层有一个不同的数字,例如第n层有个数字k,那么这一层只能上k层或下k层,但是不能到达低于一层或高于n层的层数,给定起点与终点,要求出最少要按几次键才能到达目标层数。
解题思路
用BFS方法来做。对于当前所在楼层,有两种方案,上或下,且移动的楼层数为该层的指定数目,所以列出这两种情况,对每种情况在分别搜索,之道能到达目标楼层为止,在这个过程中,要对所经过的楼层做访问标记,同时进行相应计步,在到达目标楼层后相应返回总步数。
感想
BFS,运用搜索策略和相应模板(如队列进行罗列和展开),从而解决问题。
AC代码
#include<iostream>#include<cstring>#include<queue>using namespace std;#define SUM 210int n,a,b;int num[SUM],visit[SUM];struct node{ int x,step;};bool judge(int x){ if( x<=0 || x>n ) return true; return false;}int BFS(){ queue<node>q; node m,next; int i; m.x=a; m.step=0; visit[a]=1; q.push(m); while( !q.empty() ) { m=q.front(); q.pop(); if(m.x==b) return m.step; for(i=-1;i<=1;i+=2) { next = m; next.x += i*num[next.x]; if( judge(next.x) || visit[next.x] ) continue; visit[next.x]=1; next.step++; q.push(next); } } return -1; }int main(){ int i; while(cin>>n,n) { cin>>a>>b; for(i=1;i<=n;i++) cin>>num[i]; memset(visit,0,sizeof(visit)); cout<<BFS()<<endl; }}
0 0
- 搜索—Problem_1013&1014-A strange lift
- 1014 A strange lift
- 1014-A strange lift
- 1014-A strange lift
- 1014-A strange lift
- 1014 A strange lift
- 1014 A strange lift
- hdu 1548 A strange lift(搜索:BFS)
- HDU 1548 A strange lift 搜索
- SDAU 搜索专题 13 A strange lift
- BFS 搜索 Problem 1013 A strange lift
- A strange lift宽度搜索优先队列
- 1013&&1014 A strange lift
- 课程练习二-1014 A strange lift
- hdu1548——A strange lift
- HDU A strange lift
- HDUOJ1548 A strange lift
- hdu1548 A strange lift
- 回家的路
- 绑定KVM虚拟机的vcpu与物理CPU
- 认证模式之Digest模式
- Beego走起(二) 路由的简单设置
- java使用线程请求访问每次间隔10分钟连续5次,之后停止请求
- 搜索—Problem_1013&1014-A strange lift
- Android Launcher 启动简述 <2>
- Nema协议校验码算法
- Redis简介
- 转:Android NDK开发之Jni调用Java对象
- Node 学习笔记之事件发射器
- c++导出自定义类到lua中的一些底层实现
- Fragment的生命周期
- fastDFS安装