InputThe input consists of several test cases.,Each test case contains two lines.
The first line contains three integers N ,A,B( 1 <= N,A,B <= 200) which describe above,The second line consist N integers k1,k2,....kn.
A single 0 indicate the end of the input.OutputFor each case of the input output a interger, the least times you have to press the button when you on floor A,and you want to go to floor B.If you can't reach floor B,printf "-1".Sample Inputjava
5 1 5 3 3 1 2 5 0
Sample Output数组
3
用vis[]数组记录已经走过哪层
广搜注意事项:对于有多个输入
1.vis数组必定要初始化
2.队列必定要清空
3.初始点必定要标记vis=true
4.分清楚到底几个方向,是4个方向,仍是6个方向,for(int i=0;i<4||i<6;i++)
5.遍历完每种状况必定要入队
代码:
import java.util.*; class Node{ int x; long times; public Node(int x,long times){ this.x=x; this.times=times; } } public class Main{ static ArrayDeque<Node> q=new ArrayDeque<Node>(); static final int N=205; static int val[]=new int[N]; static boolean vis[]=new boolean[N]; static int n,a,b; static long bfs(){ while(!q.isEmpty()) q.poll(); Arrays.fill(vis, false); vis[a]=true;; q.offer(new Node(a,0)); while(!q.isEmpty()){ Node t=q.poll(); if(t.x==b) return t.times; for(int i=-1;i<=1;i+=2){ int xx=t.x+i*val[t.x]; if(xx<=0||xx>n ||vis[xx]) continue; vis[xx]=true; q.offer(new Node(xx,t.times+1)); } } return -1; } public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(scan.hasNext()){ n=scan.nextInt(); if(n==0) break; a=scan.nextInt(); b=scan.nextInt(); for(int i=1;i<=n;i++) val[i]=scan.nextInt(); System.out.println(bfs()); } } }