1078. 奇怪的电梯 (Standard IO)
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述
大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢?
输入
输入文件共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N),第二行为N个用空格隔开的正整数,表示Ki。
输出
输出文件仅一行,即最少按键次数,若无法到达,则输出-1。
样例输入
5 1 5 3 3 1 2 5
样例输出
3
数据范围限制
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[1010]; 5 bool b[1010]; 6 void f(int ,int ); 7 int n,m,w,in=9999; 8 int main() 9 { 10 cin>>w>>n>>m; 11 for(int i=1;i<=w;++i) 12 scanf("%d",&a[i]); 13 f(n,0); 14 if(in==9999)cout<<"-1"; 15 else cout<<in; 16 return 0; 17 } 18 void f(int ow,int st) 19 { 20 if(st>in)return ; 21 if(ow==m) 22 { 23 if(st<in)in=st; 24 return ; 25 } 26 else { 27 if(ow==m){if(st<in)in=st;return ;} 28 b[ow]=true ; 29 if(ow + a[ow] <=w &&b[ow+a[ow]]==0) 30 f(ow + a[ow],st+1); 31 if(ow - a[ow] > 0 &&b[ow-a[ow]]==0) 32 f(ow - a[ow],st+1); 33 b[ow]=false; 34 } 35 }
时间: 2024-10-08 00:32:09