A strange lift
2013-05-24 01:46
363 查看
A strange lift
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 13 Accepted Submission(s) : 11
[align=left]Problem Description[/align]
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"?
[align=left]Input[/align]
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.
[align=left]Output[/align]
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".
[align=left]Sample Input[/align]
5 1 5
3 3 1 2 5
0
[align=left]Sample Output[/align]
3
#include<cstdio> #define INF (int)1e7 #define N 205 int dis ,map ,v ,n; void dijkstra(int s) { int i,j; for(i=1;i<=n;i++)//0~n-1µÄ±àºÅ { v[i]=0; dis[i]=map[s][i]; } dis[s]=0; 4000 v[s]=1; for(i=0;i<n;i++) { int min=INF; int pos=0; for(j=1;j<=n;j++) { if(!v[j]&&min>dis[j]) { pos=j; min=dis[j]; } } v[pos]=1; if(min==INF) break; for(j=1;j<=n;j++) { int p=dis[pos]+map[pos][j]; if(!v[j]&&p<dis[j]) { dis[j]=p; } } } } int main() { int a,b,k,i,j; while(~scanf("%d",&n),n) { scanf("%d%d",&a,&b); for(i=1;i<=n;i++)//½ÚµãÊý for(j=1;j<=n;j++) map[i][j]=INF; for(i=1;i<=n;i++) { scanf("%d",&k); if(i+k<=n) { map[i][i+k]=1;//模拟相邻的电梯 } if(i-k>=1) { map[i][i-k]=1; } } dijkstra(a); if(dis[b]!=INF) printf("%d\n",dis[b]); else printf("-1\n"); } return 0; }
相关文章推荐
- HDOJ 1548 HDU 1548 A strange lift ACM 1548 IN HDU
- hdu 1548 A strange lift(bfs||dijkstra)
- HDU 1548 A strange lift
- hdu 1548:A strange lift
- HDU 1548 A strange lift(最短路或BFS)
- hdu 1548 A strange lift(bfs)
- HDU 1548 A strange lift
- #HDU 1548 A strange lift 【BFS】
- HDU 1548 a strange lift
- 1014-A strange lift
- A strange lift
- HDU 1548 A strange lift (简单bfs)
- 4.2.4--广搜--A strange lift
- hdu 1548 A strange lift
- Problem M:A strange lift(HDU 1548)(bfs实现)
- hdu1548 A strange lift
- hdoj 1548 A strange lift(bfs)
- 杭电 HDU 1548 A strange lift
- hdoj 1548 A strange lift
- 【Dijkstra】-HDU-1548-A strange lift