A strange lift

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Problem Description
There is a strange lift.The lift can stop can at every
floor as you want, and there is a number Ki(0 <= Ki <= N) on every
floor.The lift have just two buttons: up and down.When you at floor i,if you
press the button "UP" , you will go up Ki floor,i.e,you will go to the i+Ki th
floor,as the same, if you press the button "DOWN" , you will go down Ki
floor,i.e,you will go to the i-Ki th floor. Of course, the lift can't go up high
than N,and can't go down lower than 1. For example, there is a buliding with 5
floors, and k1 = 3, k2 = 3,k3 = 1,k4 = 2, k5 = 5.Begining from the 1 st
floor,you can press the button "UP", and you'll go up to the 4 th floor,and if
you press the button "DOWN", the lift can't do it, because it can't go down to
the -2 th floor,as you know ,the -2 th floor isn't exist.
Here comes the
problem: when you are on floor A,and you want to go to floor B,how many times at
least he has to press the button "UP" or "DOWN"?
 
Input
The input consists of several test cases.,Each test
case contains two lines.
The first line contains three integers N ,A,B( 1
<= N,A,B <= 200) which describe above,The second line consist N integers
k1,k2,....kn.
A single 0 indicate the end of the input.
 
Output
For each case of the input output a interger, the least
times you have to press the button when you on floor A,and you want to go to
floor B.If you can't reach floor B,printf "-1".
 
Sample Input
5 1 5
3 3 1 2 5
0
 
Sample Output
3
 
 
题目大意:
      有一个电梯,在不同的楼层,可以上升或下降的层数是不同的
       (例如第一层有一个整数3,说明他可以上升3层或者下降3层),
      现在给你一个起始位置和最终位置,问至少需要几步能够到达最终位置。
 
解题思路:
      该题可以用最短路,也可以用广搜来写
       最短路:需要注意的是这题是单向边
       bfs:每次只需要搜索两个方向
最短路算法:
 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const int inf = <<; int n;
int map[][];
int a[],cnt;
int vis[],cast[]; void Dijkstra(int s,int e) //迪杰斯特拉
{
int i,j,min,pos;
memset(vis,,sizeof(vis));
for(i = ; i<n; i++)
cast[i] = map[s][i];
cast[s] = ;
vis[s] = ;
for(i = ; i<n; i++)
{
min = inf;
for(j = ; j<n; j++)
{
if(cast[j]<min && !vis[j])
{
pos = j;
min = cast[j];
}
}
if(min == inf)
break;
vis[pos] = ;
for(j = ; j<n; j++)
{
if(cast[pos]+map[pos][j]<cast[j] && !vis[j])
cast[j] = cast[pos]+map[pos][j];
}
}
} int main()
{
int i,j,s,e,x,y;
while(~scanf("%d",&n),n)
{
scanf("%d%d",&s,&e);
s--,e--;
for(i = ; i<n; i++)
for(j = ; j<n; j++)
map[i][j] = inf;
for(i = ; i<n; i++) //单向边
{
scanf("%d",&a[i]);
if(i+a[i]<n) //上升
map[i][i+a[i]] = ;
if(i-a[i]>=) //下降
map[i][i-a[i]] = ;
}
Dijkstra(s,e);
printf("%d\n",cast[e]==inf?-:cast[e]);
} return ;
}

广搜 bfs:

 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std; int a[]; // 在第i层可以上升和下降的层数
int f[]; // 记录步数
int n,x,y;
void bfs()
{
int b;
memset(f,,sizeof(f));
queue<int > q;
q.push(x);
f[x] = ;
if (x == y)
return ;
while (!q.empty())
{
b = q.front();
if (b+a[b] <= n && !f[b+a[b]]) // 判断上升之后是否满足条件
{
q.push(b+a[b]);
f[b+a[b]] = f[b] + ;
if (b+a[b] == y) // 到达之后直接跳出
return ;
}
if (b-a[b] > && !f[b-a[b]]) // 判断下降之后是否满足条件
{
q.push(b-a[b]);
f[b-a[b]] = f[b] + ;
if (b-a[b] == y) // 到达之后直接跳出
return ;
}
q.pop();
}
return ;
}
int main ()
{
int i,j;
while (scanf("%d",&n),n)
{
scanf("%d%d",&x,&y);
for (i = ; i <= n; i ++)
scanf("%d",&a[i]); bfs();
if (f[y] != )
printf("%d\n",f[y]-);
else
printf("-1\n");
}
return ;
}

HDU 1548 A strange lift (bfs / 最短路)的更多相关文章

  1. HDU 1548 A strange lift (最短路/Dijkstra)

    题目链接: 传送门 A strange lift Time Limit: 1000MS     Memory Limit: 32768 K Description There is a strange ...

  2. hdu 1548 A strange lift (bfs)

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  3. hdu 1548 A strange lift

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Description There is a strange li ...

  4. HDU 1548 A strange lift(最短路&&bfs)

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. hdu 1548 A strange lift 宽搜bfs+优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at ...

  6. HDU 1548 A strange lift(BFS)

    Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...

  7. HDU 1548 A strange lift (Dijkstra)

    A strange lift http://acm.hdu.edu.cn/showproblem.php?pid=1548 Problem Description There is a strange ...

  8. HDU 1548 A strange lift 搜索

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  9. HDU 1548 A strange lift (广搜)

    题目链接 Problem Description There is a strange lift.The lift can stop can at every floor as you want, a ...

随机推荐

  1. Codeforces Round #384 (Div. 2)A,B,C,D

    A. Vladik and flights time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  2. (六)文件操作的主要接口API

    1.什么是操作系统API (1)API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用. (2)应用层程序通过调用API来调用操作系统中的各种功能,来干活. (3)学习一个操作系统 ...

  3. Head First 设计模式--1策略模式 组合优于继承

    策略模式:第一了算法族,分别封装起来,让他们之间可以互相替换,次模式让算法的变化独立于使用算法的客户. 首先看个错误的面向对象. 假如我们需要写一个关于鸭子的程序,各种类型的鸭子.第一想到的就是建一个 ...

  4. OneSQL的docker之旅

      百度盘下载地址: http://pan.baidu.com/s/1v9GWA   OneSQL Docker使用方法:  1. 解压    tar zxvf OneSql-Docker-5.6.2 ...

  5. Cocos Code IDE新建lua工程报错解决方案

    今天想用cocos code IDE新建一个工程,但是控制台报错:Read json file null failed, the reason is:null.我下载的是官方3.5源码,sdk,ndk ...

  6. 【安全测试】burpsuite安装方法

    burp suite需要安装Java环境才可以运行,最好安装jdk1.6以上版本. 1.将jdk安装路径添加到环境变量-path里,加到bin即可: C:\Program Files\Java\jdk ...

  7. C++中 接口的定义 COM

    首先定义一个虚基类的接口,其中包含虚函数AddRef Release QueryInterface,(MFC 类IUnKnown unknwn.h)分别是增加减去引用计数和查询接口然后定义一个实现类, ...

  8. React Native 文本输入

    TextInput是一个允许用户输入文本的基础组件.它有一个名为onChangeText的属性,此属性接受一个函数,而此函数会在文本变化时被调用.另外还有一个名为onSubmitEditing的属性, ...

  9. [转]Java 8:不要再用循环了

    以下内容为转载,没有在jdk8中测试,具体业务场景是否存在BUG或使用需要注意的地方有待测试. ------------------分割线---------------------- 正如我之前所写的 ...

  10. ros使用rplidar hector_mapping建地图

    ros中建地图方式有两种: 首先1.首先下载hector_slam包到你工作空间的src下 命令: cd ~/catkin/src git clone https://github.com/tu-da ...