zoukankan      html  css  js  c++  java
  • J

    计院有一个bug电梯,可能是hyk造的,很多bug,电梯只有两个按钮,“上”和“下”,电梯每层都可以停,每层都有一个数字Ki(0<=Ki<=n),当你在一层楼,你按“上”键会到1+K1层,你按“下”键会到1-K1层。当然,电梯不能升到N以上,也不能降到1以下。例如,有一个五层楼的建筑,k1=3,k2=3,k3=1,k4=2,k5=5。从第一层开始,你可以按“上”按钮,然后你就上到第四层,如果在第一层按“下”按钮,电梯就不能做到,因为你知道它不能下到负二层。负二楼不存在。
    那么,你想从A层到B层,你至少要按多少次“上”或“下”按钮呢?Input输入由几个测试用例组成,每个测试用例包含两行。 
    第一行包含三个整数n,a,b(1<=n,a,b<=200),如上文所述,第二行包含n个整数k1,k2,….kn。 
    单个0表示输入的结束。Output对于每种情况下的输入输出一个整数,当你在A层,你必须按下按钮的最少次数,你想去B层。如果你不能到达B层,打印“-1”。Sample Input

    5 1 5
    3 3 1 2 5
    0

    Sample Output

    3

    题目大意就是当以在第i层的时候,按上去i+ki层,,按下去i-ki,问 当你在第A层的时候想要去第B层 至少需要按几次;
    经典BFS。。。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    int n,a,b;
    int arr[200+10];
    int mark[200+10];
    int step[200+10];
    int d[2]={1,-1};
    int flag=0;
    int ans;
    void bfs(int x){
        queue<int >que;
        que.push(x);
        mark[x]=1;
        step[x]=0;
        while(que.size()){
            int y=que.front();
            que.pop();
            
            if(y==b){
                ans=step[y];
                flag=1;
                break;
            }
            for(int i=0;i<2;i++){
                int dy=y+arr[y]*d[i];
                if(dy>0&&dy<=n&&mark[dy]==0){
                    mark[dy]=1;
                    step[dy]=step[y]+1;
                    que.push(dy);
                }
            }
            
        }
    }
    int main(){    
        while(scanf("%d",&n)&&n){
            scanf("%d%d",&a,&b);//从a到b ,,开始时应该在a层 
            for(int i=1;i<=n;i++)
                scanf("%d",&arr[i]); 
            memset(mark,0,sizeof(mark));
            flag=0;
            bfs(a); 
            if(flag) printf("%d
    ",ans);
            else puts("-1");
        }
        return 0;
    }
  • 相关阅读:
    BOI 2002 双调路径
    BOI'98 DAY 2 TASK 1 CONFERENCE CALL Dijkstra/Dijkstra+priority_queue/SPFA
    USACO 2013 November Contest, Silver Problem 2. Crowded Cows 单调队列
    BOI 2003 Problem. Spaceship
    USACO 2006 November Contest Problem. Road Blocks SPFA
    CEOI 2004 Trial session Problem. Journey DFS
    USACO 2015 January Contest, Silver Problem 2. Cow Routing Dijkstra
    LG P1233 木棍加工 动态规划,Dilworth
    LG P1020 导弹拦截 Dilworth
    USACO 2007 February Contest, Silver Problem 3. Silver Cow Party SPFA
  • 原文地址:https://www.cnblogs.com/Accepting/p/11251708.html
Copyright © 2011-2022 走看看