1. 程式人生 > >遍歷查找跳格子邏輯

遍歷查找跳格子邏輯

jump println args 左右 pat log boolean exti import

package solution;

import java.util.Scanner;
import java.util.Stack;

public class Jump {
    
    static boolean found=false;
    static int count=0;
    public static void main(String[] args) {
         

         Scanner sc=new Scanner(System.in);

         
         int N=sc.nextInt();
         
         
for(int cases=1;cases<=N;cases++){ int len=sc.nextInt(); int s=sc.nextInt()-1; int f=sc.nextInt()-1; int steps[]=new int[len]; for(int k=0;k<len;k++){ steps[k]=sc.nextInt(); } Stack
<Integer> t=new Stack<Integer>(); Stack<Integer> q=new Stack<Integer>(); found=false; count=0; Jump j=new Jump(); j.findtarget(steps, s, f, t,q); if(found){ System.out.println("
#"+cases+" "+(count)); for(int i=0;i<t.size();i++){ // print path //System.out.println(t.get(i)); } }else{ System.out.println("#"+cases+" -1"); } } sc.close(); } public void findtarget(int steps[],int s,int f,Stack<Integer> t,Stack<Integer> q){ if(checkbound(steps,s)&&!found) { //left if((s>1)&&checkbound(steps,s-steps[s])&&!q.contains(s)&&!q.contains(s-steps[s])&&!found){ t.add(s-steps[s]); q.add(s); count++; if(t.peek()==f){ found=true; }else{ findtarget(steps,t.peek(),f,t,q); } } else //right if((s<steps.length)&&checkbound(steps,s+steps[s])&&!q.contains(s)&&!q.contains(s+steps[s])&&!found){ t.add(s+steps[s]); q.add(s); count++; if(t.peek()==f){ found=true; }else{ findtarget(steps,t.peek(),f,t,q); } } } } public static boolean checkbound(int setpn[],int p){ boolean r=true; if( p>setpn.length || p<0) r=false; return r; } } /* 例如 有10個 整數 1 4 2 2 4 3 6 7 10 5 從第3個數開始 可以左右跳, 第三個數對應的值是2,所以可以向左或者向右跳2個位置, 比如向左跳2個位置,到達第1個數, 求 要到達數字6 要跳多少次? 如果沒有到達最終的數字的可以打印 -1,如果有打印 次數。 給出下面5組用例, 以及每個用例包含的數字,和 開始位置 結束位置。 5 4 2 3 1 6 1 1 4 2 3 1 2 2 2 4 2 3 1 2 2 1 10 3 6 1 4 2 2 4 3 6 7 10 5 100 1 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 #1 -1 #2 -1 #3 2 #4 3 #5 99 */

遍歷查找跳格子邏輯