来源信息学编程课课通
#include<bits/stdc++.h>
using namespace std;
int a[10000000];
int visited[10000000];
struct caster{
int floor; // 楼层数
int step; //按了几次
};
int main()
{
// freopen("lift","r",stdin);
// freopen("lift","w",stdout);
memset(visited ,0 ,sizeof(visited));
int n; cin>>n;
int s,e; cin>>s>>e;
for(int i=1;i<=n;i++) cin>>a[i];
queue <caster> fate;
struct caster lancer; lancer.floor = s; lancer.step = 0;
fate.push(lancer);
bool flag = false;
while( !fate.empty() )
{
struct caster t = fate.front();
//cout << t.floor << " ";
if( t.floor == e) {
cout << t.step;
flag = true;
break;
}
int k = t.floor - a [ t.floor ];
if( k>0 && visited[k] == 0)
{
struct caster son1 ; son1.floor = k; son1.step = t.step + 1;
fate.push(son1);
visited[k]=1;
}
int h = t.floor + a [ t.floor ];
if(h<=n && visited[h]==0)
{
struct caster son2 ; son2.floor = h; son2.step = t.step + 1;
fate.push(son2);
visited[h]=1;
}
fate.pop();
}
if( flag == false ) cout << -1;
return 0;
}