题目描述
呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 层楼()上有一个数字 ()。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如: 代表了 (,,……),从 楼开始。在 楼,按“上”可以到 楼,按“下”是不起作用的,因为没有 楼。那么,从 楼到 楼至少要按几次按钮呢?
输入格式
共二行。
第一行为三个用空格隔开的正整数,表示 (,)。
第二行为 个用空格隔开的非负整数,表示 。
输出格式
一行,即最少按键次数,若无法到达,则输出 -1
。
输入输出样例
说明/提示
对于 的数据,,,。
#include<bits/stdc++.h> using namespace std; int num[205]; int a,b,n,i,ans=-1; int pos=a; int vis[205]; void dfs(int step,int sum) { if(step==b) { ans=sum; return; } if(num[step]==0||sum>=ans&&ans!=-1) return; vis[step]=1; if(vis[step+num[step]]==0&&step+num[step]<=n) dfs(step+num[step],sum+1); if(vis[step-num[step]]==0&&step-num[step]>=1) dfs(step-num[step],sum+1); vis[step]=0; } int main() { cin>>n>>a>>b; int i; for(i=1;i<=n;i++) { cin>>num[i]; } vis[a]=1; dfs(a,0); cout<<ans<<endl; }