zoukankan      html  css  js  c++  java
  • xcoj1227-电梯

    题目描述
    实验楼有一部神秘的电梯,它只有“上”和“下”两个按钮,实验楼的每一层都标有一个值K,第i层的值为Ki,如果按了“上”按钮,会从第i层升到第i+Ki层;如果按了“下”按钮则会从第i层降到第i-Ki层,已知能到的层数为1到N层,GX想从第A层上到第B层,现在给你N,A,B和一串数K1到Kn,请求出GX从A到B,至少按下多少个按钮。

    输入
    第一行输入N,A,B( 1 <= N,A,B <= 300) ,表示实验楼共有N层,起点为A,终点为B

    第二行输入N个数,表示K1到Kn

    输出
    对于每组数据,输出一个数,表示GX从A到B,至少按下多少个按钮,如果GX无法到达B,请输出-1.

    样例输入
    5 1 5
    3 3 1 2 5
    样例输出
    3

        此题主要采用bfs进行搜索,思路挺简单的,代码中有注释.
    
    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <queue>
    #include <cstring>
    using namespace std;
    
    class Data
    {
        public:
            int floor;   //层数
            int step;    //到此层数的步数
            bool vis;    //是否已遍历此层
            int k;       //可以跳跃的层数
    };
    
    int n, A, B;
    Data data[305];
    
    void bfs(int a, int step)
    {
        queue<Data> q;
        q.push(data[a]);
        data[a].vis = true;
        while(!q.empty())
        {
            Data cnt = q.front();
            q.pop();
            if(cnt.floor == B)     //当到达目标层时,输出结果
            {
                cout << cnt.step << endl;
                return ;
            }
            if(cnt.floor - cnt.k > 0 && !data[cnt.floor - cnt.k].vis)
            {
                data[cnt.floor - cnt.k].step = cnt.step + 1;
                data[cnt.floor - cnt.k].vis = true;
                q.push(data[cnt.floor - cnt.k]);
            }
            if(cnt.floor + cnt.k <= n && !data[cnt.floor + cnt.k].vis)
            {
                data[cnt.floor + cnt.k].step = cnt.step + 1;
                data[cnt.floor + cnt.k].vis = true;
                q.push(data[cnt.floor + cnt.k]);
            }
        }
        cout << "-1" << endl;
    }
    
    int main()
    {
        //ifstream cin("data1.in");
        //int n, a, b;
        while(cin >> n >> A >> B)
        {
            for(int i = 1; i <= n; i ++)
            {
                cin >> data[i].k;
                data[i].step = 0;
                data[i].vis = false;
                data[i].floor = i;
            }
            bfs(A, 0);
        }
        return 0;
    }
  • 相关阅读:
    twitter分享问题(三)——Required oauth_verifier parameter not provided
    旋转数组的最小数字
    关系型数据库基础之:简单的数据查询
    twitter分享问题(一)——MISSING_ARG_APIKEY
    extern "C"的理解
    从一个链接错误探究GCC的链接库顺序
    GAE 博客——B3log Solo 0.4.0 正式版发布了!
    不使用资源文件动态创建对话框的做法
    GAE 博客——B3log Solo 0.4.0 正式版发布了!
    CodeBlocks启动多个进程实例的做法
  • 原文地址:https://www.cnblogs.com/topk/p/6580117.html
Copyright © 2011-2022 走看看