一群大佬用广搜做,蒟蒻的我只会用深搜做......
我们只需要用深搜去找一下有没有这一层........然后就完事了,代码:
#include<iostream> using namespace std; int n,m,minn=2<<30-1; int x,y,a[110000],b[110000]={0}; void zhao(int k,int sum) { if(sum>minn) return;//剪枝,如果当前你要找的值大于当前最小值 if(k==y) { minn=min(minn,sum); return; } if(k+a[k]<=n&&b[k+a[k]]==0)//边界,判重 { b[k+a[k]]=1; zhao(k+a[k],sum+1); b[k+a[k]]=0; } if(k-a[k]>=1&&b[k-a[k]]==0) { b[k-a[k]]=1; zhao(k-a[k],sum+1); b[k-a[k]]=0; } return ; } int main() { cin>>n>>x>>y; for(int i=1;i<=n;i++) cin>>a[i]; zhao(x,0); if(minn!=2<<30-1) { cout<<minn; return 0; } cout<<"-1"; }