奇怪的电梯

呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。

上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。

例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮呢?

输入格式

       输入文件共有二行,第一行为三个空格隔开的正整数,表示N,A,B(1<=N<+200,1<=A,B<=N),第二行为N个用空格隔开的正整数,表示Ki。

输出格式

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

样例输入

5 1 5

3 3 1 2 5

样例输出

3

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;


public class 电梯 {

    /**
     * @jl
     */
    public static Scanner sc = new Scanner(System.in);
    //总楼数
    public static int c = sc.nextInt();
    //起始点
    public static int m = sc.nextInt();
    //目的地
    public static int n = sc.nextInt();
    //构建数组
    public static int a[][] = new int[c][c];
    public static int count = 0;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //给数组赋值
        for (int i = 0; i < c; i++) {
            int x = sc.nextInt();
            if(i+x<c){
                a[i][i+x]=1;
            }
            if(i-x>=0){
                a[i][i-x]=1;
            }
        }
        System.out.println( bfs());
    }
    public static int bfs() {
        // TODO Auto-generated method stub
        //判断是否访问过
        boolean f[] = new boolean[c];
        Queue<Integer> q = new LinkedList<Integer>();
        //起始节点
        if(!f[m - 1]){
            q.add(m-1);
            f[m-1]=true;
        }
        while (!q.isEmpty()) {
            int k = q.poll();
            //目的地已到达跳出
            if(f[n-1]==true){
                break;
            }
            else
            {
                count++;
                for (int i = 0; i < c; i++) {
                    //没有访问过并且可以到达
                    if(!f[i]&&a[k][i]==1){
                        q.add(i);
                        f[i]=true;
                    }
                }
            }
        }
        //如果没有访问到 count为-1
        if(f[n-1]==false){
            count = -1;
        }
        return count;
    }

}

 

posted @ 2020-02-24 15:53  智阿广  阅读(355)  评论(0)    收藏  举报