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()); } } }