亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于Java實現(xiàn)馬踏棋盤游戲算法

 更新時間:2022年02月14日 17:03:08   作者:L_Mcode  
這篇文章主要為大家詳細(xì)介紹了基于Java實現(xiàn)馬踏棋盤游戲算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

馬踏棋盤很好實現(xiàn),但有時運行起來特別慢,還可能出不來結(jié)果,最常用的就是深度優(yōu)先遍歷+回溯,相信大家都學(xué)過數(shù)據(jù)結(jié)構(gòu),對圖的深度遍歷都有了解,下面就是代碼的實現(xiàn),如果對代碼理解有困難,可以先熟悉一下圖的深度優(yōu)先遍歷

大家可以把棋盤改小一些測試,8x8的確實很慢

import java.util.Arrays;

/**
?* 騎士周游問題
?* @author LM_Code
?* @create 2019-03-17-18:57
?*/
public class KnightProblem {
? ? static final int SIZE = 8;//設(shè)置棋盤的行數(shù)和列數(shù)>=5時才有解
? ? static final int[][] A = new int[SIZE][SIZE];//初始化棋盤,數(shù)組中所有值默認(rèn)為0
? ? static final int[] NEXT= new int[]{1, 2};//設(shè)置馬的下一步,用空間為2的數(shù)組代替x,y坐標(biāo)
? ? public static void main(String[] args) {
? ? ? ? //判斷此點是否能走完整個棋盤
? ? ? ? if(method(NEXT, 1)){//能,則輸出棋盤軌跡
? ? ? ? ? ? for (int i = 0; i < A.length; i++) {
? ? ? ? ? ? ? ? System.out.println(Arrays.toString(A[i]));
? ? ? ? ? ? }
? ? ? ? }else{//不能,提示無解
? ? ? ? ? ? System.out.println("此起點無解");
? ? ? ? }
? ? }
? ? //傳入下一步NEXT,和并表明下一步是第幾步tag,返回此點是否能走完棋盤(有解)
? ? public static boolean method(int[] NEXT, int tag){
? ? ? ? int[] current = new int[]{NEXT[0], NEXT[1]};//將當(dāng)前步存入本次方法調(diào)用的局部變量
? ? ? ? A[current[0]][current[1]] = tag;//把馬跳到當(dāng)前位置,并標(biāo)記為是第幾步
? ? ? ? // 如果是最后一步,遞歸結(jié)束
? ? ? ? if(tag == SIZE*SIZE){
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? //如果不是最后一步,下一步有8中可能
? ? ? ? for (int i = 0; i < 8; i++) {
? ? ? ? ? ? //下一步的第i種情況是否可走
? ? ? ? ? ? if(canGo(current, i)){//如果可以走,繼續(xù)遞歸
? ? ? ? ? ? ? ? //判斷此時的下一步,是否能走完棋盤
? ? ? ? ? ? ? ? if(method(NEXT, tag+1)){//能,返回true,遞歸結(jié)束
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //此時的下一步不能走完棋盤,則繼續(xù)尋找第i+1種情況的下一步是否有解
? ? ? ? ? ? }
? ? ? ? ? ? //此時的下一步無解,則尋找第i+1種情況是否有解
? ? ? ? }
? ? ? ? //如果當(dāng)前步無法走完棋盤(無解)
? ? ? ? A[current[0]][current[1]] = 0;//回溯:撤銷當(dāng)前步,當(dāng)前步賦值為0
? ? ? ? return false;//返回false,回到上一步,表明此步無解
? ? }
? ? //判斷下一步是否能走,下一步有8中情況0-7,傳入當(dāng)前步arr,判斷是否有第count種情況的下一步
? ? public static boolean canGo(int[] arr,int count){
? ? ? ? switch (count){
? ? ? ? ? ? case 0 :
? ? ? ? ? ? ? ? if(arr[0]-1>=0&&arr[1]+2<SIZE&&A[arr[0]-1][arr[1]+2]==0) {
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]-1;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]+2;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 1 :
? ? ? ? ? ? ? ? if(arr[0]+1<SIZE&&arr[1]+2<SIZE&&A[arr[0]+1][arr[1]+2]==0){
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]+1;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]+2;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 2 :
? ? ? ? ? ? ? ? if(arr[0]+2<SIZE&&arr[1]+1<SIZE&&A[arr[0]+2][arr[1]+1]==0){
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]+2;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]+1;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 3 :
? ? ? ? ? ? ? ? if(arr[0]+2<SIZE&&arr[1]-1>=0&&A[arr[0]+2][arr[1]-1]==0){
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]+2;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]-1;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 4 :
? ? ? ? ? ? ? ? if(arr[0]+1<SIZE&&arr[1]-2>=0&&A[arr[0]+1][arr[1]-2]==0){
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]+1;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]-2;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 5 :
? ? ? ? ? ? ? ? if(arr[0]-1>=0&&arr[1]-2>=0&&A[arr[0]-1][arr[1]-2]==0){
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]-1;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]-2;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 6 :
? ? ? ? ? ? ? ? if(arr[0]-2>=0&&arr[1]-1>=0&&A[arr[0]-2][arr[1]-1]==0){
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]-2;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]-1;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 7 :
? ? ? ? ? ? ? ? if(arr[0]-2>=0&&arr[1]+1<SIZE&&A[arr[0]-2][arr[1]+1]==0){
? ? ? ? ? ? ? ? ? ? NEXT[0] = arr[0]-2;
? ? ? ? ? ? ? ? ? ? NEXT[1] = arr[1]+1;
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? default:
? ? ? ? }
? ? ? ? return false;
? ? }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java版學(xué)生管理系統(tǒng)

    Java版學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java版學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • spring中向一個單例bean中注入非單例bean的方法詳解

    spring中向一個單例bean中注入非單例bean的方法詳解

    Spring是先將Bean對象實例化之后,再設(shè)置對象屬性,所以會先調(diào)用他的無參構(gòu)造函數(shù)實例化,每個對象存在一個map中,當(dāng)遇到依賴,就去map中調(diào)用對應(yīng)的單例對象,這篇文章主要給大家介紹了關(guān)于spring中向一個單例bean中注入非單例bean的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Java 實現(xiàn)LZ78壓縮算法的示例代碼

    Java 實現(xiàn)LZ78壓縮算法的示例代碼

    這篇文章主要介紹了Java 實現(xiàn)LZ78壓縮算法的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 詳解如何在Java中創(chuàng)建Excel迷你圖

    詳解如何在Java中創(chuàng)建Excel迷你圖

    迷你圖是一種簡潔而有效的數(shù)據(jù)可視化方式,常用于展示趨勢和變化,通常被用于數(shù)據(jù)儀表盤、報告和展示中,以便在有限的空間內(nèi)展示多個數(shù)據(jù)集的趨勢,今天小編為大家介紹如何在Java中創(chuàng)建Excel迷你圖,需要的朋友可以參考下
    2023-10-10
  • Java用split分割含一個或多個空格的字符串案例

    Java用split分割含一個或多個空格的字符串案例

    這篇文章主要介紹了Java用split分割含一個或多個空格的字符串案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來過來看看吧
    2020-09-09
  • Java Ribbon負(fù)載均衡詳細(xì)講解

    Java Ribbon負(fù)載均衡詳細(xì)講解

    Ribbon其實就是一個軟負(fù)載均衡的客戶端組件,他可以和其他所需請求的客戶端結(jié)合使用,這篇文章主要介紹了Ribbon負(fù)載均衡服務(wù)調(diào)用案例代碼,需要的朋友可以參考下
    2023-01-01
  • Java使用JDBC連接Oracle_MSSQL實例代碼

    Java使用JDBC連接Oracle_MSSQL實例代碼

    這篇文章主要介紹了Java使用JDBC連接Oracle_MSSQL實例代碼,需要的朋友可以參考下
    2014-01-01
  • Jenkins 編譯后使用SSH發(fā)布詳解

    Jenkins 編譯后使用SSH發(fā)布詳解

    這篇文章主要介紹了Jenkins 編譯后使用SSH發(fā)布詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • java8中Map的一些騷操作總結(jié)

    java8中Map的一些騷操作總結(jié)

    這篇文章主要給大家介紹了關(guān)于java8中Map的一些騷操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • window?下?win10?jdk8安裝與環(huán)境變量的配置過程

    window?下?win10?jdk8安裝與環(huán)境變量的配置過程

    這篇文章主要介紹了window?下?win10?jdk8安裝與環(huán)境變量的配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08

最新評論