P1135 奇怪的电梯

这题懂了之后就很简单了,感觉和一维的迷宫差不多

先看样例吧

5 1 5

3 3 1 2 5

要从一楼上到五楼

一楼是直接上(下)三层,因为没有-2楼,所以上到4楼

再从四楼下到二楼

最后从二楼上到五楼

一共用了三步

上代码吧:

#include<cstdio>
#include<iostream>
using namespace std;
int n,a,b,ans=9999999;
int o[205];
int book[205];
void dfs(int x,int sum)
{
    if(x==b) 
    {
        ans=min(ans,sum);//找出最小的步数
    }
    if(sum>ans) 
    {
        return;//如果比以前多,就返回上一步
    }
    book[x]=1;
    if(x+o[x]<=n&&book[x+o[x]]!=1)//判断是否越界和以前是否走过
    {
        dfs(x+o[x],sum+1);//上楼,步数+1
    }
    if(x-o[x]>=1&&book[x-o[x]]!=1)
    {
        dfs(x-o[x],sum+1);//下楼,步数+1
    }
    book[x]=0;
}
int main()
{
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++)
    {
        cin>>o[i];
    }
    book[a]=1;//不可以走回起点
    dfs(a,0);
    if(ans!=9999999)
    {
        cout<<ans<<endl;
    }
    else//如果没有方法,输出-1
    {
        cout<<"-1"<<endl;
    }
    return 0;
}

就这样愉快的AC了(*^_^*)

原文地址:https://www.cnblogs.com/zjylzf/p/12896404.html