实在找不到错了,我是菜鸡 代码如下:好人一生平安!
// P1135 奇怪的电梯 BFS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int n,arr[520],q[520],f,r;
int temp[520];
//写一个循环队列[f,r)左闭右开的区间
int step;
const int qSize=200;
int main(){
int a,b,i,j,tmp1,tmp2;
int ans = 0x3f3f3f3f;
scanf("%d%d%d",&n,&a,&b);
for(i=1;i<=n;i++){
scanf("%d",&arr[i]);
}
q[r%qSize]=a,r++,tmp1=a,tmp2=a;
while (r-f>0)
{
for(i=0;i<r-f;i++){
temp[i]=q[(f+i)%qSize];
}
step++;
for(j=0;j<i;j++){
tmp1=tmp2=temp[j];
if(tmp1==b){
ans=step-1;
break;
}
if(tmp1+arr[temp[j]]<=n && tmp1+arr[temp[j]]!=b){
tmp1+=arr[temp[j]];
q[r%qSize]=tmp1;
r=(r+1)%qSize;
}
if(tmp2-arr[temp[j]]>=1 && tmp2-arr[temp[j]]!=b){
tmp2-=arr[temp[j]];
q[r%qSize]=tmp2;
r=(r+1)%qSize;
}
if(tmp1+arr[temp[j]]==b){
ans=step;
break;
}
if(tmp2-arr[temp[j]]==b){
ans=step;
break;
}
}
f=(f+i)%qSize;
}
if(ans == 0x3f3f3f3f){
printf("-1");
}
else{
printf("%d",ans);
}
return 0;
}