奇怪的电梯

一群大佬用广搜做,蒟蒻的我只会用深搜做......

我们只需要用深搜去找一下有没有这一层........然后就完事了,代码:

#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";
}
posted @ 2018-07-23 16:30  DJY_01  阅读(176)  评论(0)    收藏  举报