zoukankan      html  css  js  c++  java
  • P1135 奇怪的电梯(洛谷)

     

    题解题目描述

    呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第iii层楼(1≤i≤N)(1 le i le N)(1iN)上有一个数字Ki(0≤Ki≤N)K_i(0 le K_i le N)Ki(0KiN)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3,3,1,2,53, 3 ,1 ,2 ,53,3,1,2,5代表了Ki(K1=3,K2=3,…)K_i(K_1=3,K_2=3,…)Ki(K1=3,K2=3,),从111楼开始。在111楼,按“上”可以到444楼,按“下”是不起作用的,因为没有−2-22楼。那么,从AAA楼到BBB楼至少要按几次按钮呢?

    输入格式

    共二行。

    第一行为333个用空格隔开的正整数,表示N,A,B(1≤N≤200,1≤A,B≤N)N,A,B(1≤N≤200, 1≤A,B≤N)N,A,B(1N200,1A,BN)。

    第二行为NNN个用空格隔开的非负整数,表示KiK_iKi

    输出格式

    一行,即最少按键次数,若无法到达,则输出−1-11。

    输入输出样例

    输入 #1
    5 1 5
    3 3 1 2 5
    
    输出 #1
    3
    题解:
    一道bfs水题
     
     题解代码:
    #include<iostream>
    #include<queue>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    
    const int maxn=200+5;
    int n,a,b;
    int color[maxn]={0};            //用做标记
    int k[maxn];
    // int sum=0;      //记录按键数
    int flag=0;        //记录是否到达B层
    int d[maxn]={0};        //用于存放到达各层的按键数(第一次存的即是最小按键数)
    //由于此处求最小的按键数,因此使用bfs更方便一些
    void bfs(int s){
        queue<int> que;
        que.push(s);
        color[s]=1;     //代表访问过 之后访问时就不再入队
        d[s]=0;         //起始层不需要按
    
        while(!que.empty()){
            int temp;
            temp = que.front();
            que.pop();
            // cout<<"temp:"<<temp<<" d:"<<d[temp]<<endl;
    
            if(temp==b){        //代表到达了B层
                flag=1;
                return;
            }
    
            int t1=temp+k[temp];
            int t2=temp-k[temp];
            if(t1<=n&&t1>=1&&color[t1]==0){
                que.push(t1);
                color[t1]=1;
                d[t1]=d[temp]+1;        //按键数+1
            }
            if(t2>=1&&t2<=n&&color[t2]==0){
                que.push(t2);
                color[t2]=1;
                d[t2]=d[temp]+1;
            }
        }
    }
    int main(){
        cin>>n>>a>>b;
    
        for(int i=1;i<=n;i++){
            cin>>k[i];
        }
        bfs(a);
    
        if(flag){
            cout<<d[b];
        }else cout<<"-1";
        return 0;
    }
     
  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/xwh-blogs/p/13786792.html
Copyright © 2011-2022 走看看