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了(*^_^*)

posted @ 2020-05-15 18:23  zjy123  阅读(202)  评论(0编辑  收藏  举报
//需要jquery插件 /* 鼠标特效 */ var a_idx = 0; jQuery(document).ready(function($) { $("body").click(function(e) { var a = new Array("(❤ ω ❤)","(☆▽☆)","(●'◡'●)","(✿◡‿◡)","(*^_^*)","O(∩_∩)O","( •̀ ω •́ )✧","(o゚v゚)ノ","(~ ̄▽ ̄)~","((≧∇≦)ノ","φ(゜▽゜*)♪","U•ェ•*U"); var $i = $("").text(a[a_idx]); a_idx = (a_idx + 1) % a.length; var x = e.pageX, y = e.pageY; $i.css({ "z-index": 999999999999999999999999999999999999999999999999999999999999999999999, "top": y - 20, "left": x, "position": "absolute", "font-weight": "bold", "color": "rgb("+~~(255*Math.random())+","+~~(255*Math.random())+","+~~(255*Math.random())+")" }); $("body").append($i); $i.animate({ "top": y - 180, "opacity": 0 }, 1500, function() { $i.remove(); }); }); });