1. 程式人生 > 其它 >洛谷P1002過河卒

洛谷P1002過河卒

邏輯沒問題,執行超時,得分60

寫註釋了,不多解釋

import java.util.Scanner;

public class D1 {
    static int a,b,c,d,con; //棋盤大小 馬的位置
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        a=sc.nextInt();
        b=sc.nextInt();
        c=sc.nextInt();
        d=sc.nextInt();
        con
=0; //到達終點的次數 //初始化棋盤 int[][] qp=new int[a+1][b+1]; for (int i = 0; i < a+1; i++) { for (int j = 0; j < b+1; j++) { qp[i][j]=0; } } //馬能跳到的位置如果合法 設定為馬的控制區(避免馬在邊緣 棋盤下標越界) qp[c][d]=1; if (!(c-2<0||d-1<0)){ qp[c
-2][d-1]=1; } if (!(c-2<0||d+1>b)){ qp[c-2][d+1]=1; } if (!(c-1<0||d-2<0)){ qp[c-1][d-2]=1; } if (!(c-1<0||d+2>b)){ qp[c-1][d+2]=1; } if (!(c+1>a||d-2<0)){ qp[c+1][d-2]=1; }
if (!(c+1>a||d+2>b)){ qp[c+1][d+2]=1; } if (!(c+2>a||d-1<0)){ qp[c+2][d-1]=1; } if (!(c+2>a||d+1>b)){ qp[c+2][d+1]=1; } //開始遞歸回溯 D1 d=new D1(); d.xl(qp,0,0); //輸出結果 System.out.println(con); } //自動尋路 private boolean xl(int[][] qp,int i,int j){ //如果到達終點,回溯並重置為0 到達次數+1 if (qp[a][b]==2){ qp[a][b]=0; con++; return false; } //如果當前位置合法,標記為2,遞迴下一個位置 if (pd(qp,i,j)){ qp[i][j]=2; if (xl(qp,i+1,j)){ qp[i][j]=0; return false; }else if (xl(qp,i,j+1)){ qp[i][j]=0; return false; } qp[i][j]=0; } return false; } //當前位置是否合法 private boolean pd(int[][] qp,int i,int j){ if (i>=a+1||j>=b+1){ return false; }else if (qp[i][j]!=0){ return false; } return true; } }