- 愿世界上再也没有墨迹且压堂的老师
- 啊……
- 不知道为什么叫传送门的传送门
代码
- 就还挺简单的
- 依旧是广搜
- 细节见代码
#include<bits/stdc++.h>
using namespace std;
int n,a,b,q[210],c[210],f[210],h,t;
int main()
{
cin>>n>>a>>b;
if(a==b) {//起终点在同一层,直接输出后结束程序
cout<<0<<endl;
return 0;
}
for(int i=1;i<=n;i++)
cin>>c[i];
h=0,t=1,q[1]=a,f[a]=1;//为了保证第a层不会再走一遍,初始化为1,因此输出时需要-1
while(h<t){
h++;
if(q[h]==b) break;//已到达
if(q[h]+c[q[h]]<=n&&!f[q[h]+c[q[h]]]){//向上走
t++;
q[t]=q[h]+c[q[h]];
f[q[t]]=f[q[h]]+1;
}
if(q[h]-c[q[h]]>=1&&!f[q[h]-c[q[h]]]){//向下走
t++;
q[t]=q[h]-c[q[h]];
f[q[t]]=f[q[h]]+1;
}
}
cout<<f[b]-1<<endl;//记得-1
return 0;
}