最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

大家可以把棋盤改小一些測(cè)試,8x8的確實(shí)很慢

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時(shí)才有解
? ? 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) {
? ? ? ? //判斷此點(diǎn)是否能走完整個(gè)棋盤
? ? ? ? if(method(NEXT, 1)){//能,則輸出棋盤軌跡
? ? ? ? ? ? for (int i = 0; i < A.length; i++) {
? ? ? ? ? ? ? ? System.out.println(Arrays.toString(A[i]));
? ? ? ? ? ? }
? ? ? ? }else{//不能,提示無(wú)解
? ? ? ? ? ? System.out.println("此起點(diǎn)無(wú)解");
? ? ? ? }
? ? }
? ? //傳入下一步NEXT,和并表明下一步是第幾步tag,返回此點(diǎn)是否能走完棋盤(有解)
? ? 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ù)遞歸
? ? ? ? ? ? ? ? //判斷此時(shí)的下一步,是否能走完棋盤
? ? ? ? ? ? ? ? if(method(NEXT, tag+1)){//能,返回true,遞歸結(jié)束
? ? ? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //此時(shí)的下一步不能走完棋盤,則繼續(xù)尋找第i+1種情況的下一步是否有解
? ? ? ? ? ? }
? ? ? ? ? ? //此時(shí)的下一步無(wú)解,則尋找第i+1種情況是否有解
? ? ? ? }
? ? ? ? //如果當(dāng)前步無(wú)法走完棋盤(無(wú)解)
? ? ? ? A[current[0]][current[1]] = 0;//回溯:撤銷當(dāng)前步,當(dāng)前步賦值為0
? ? ? ? return false;//返回false,回到上一步,表明此步無(wú)解
? ? }
? ? //判斷下一步是否能走,下一步有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;
? ? }
}

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

相關(guān)文章

  • 淺談一下Java中的ReentrantLock

    淺談一下Java中的ReentrantLock

    這篇文章主要介紹了淺談一下Java中的ReentrantLock,這個(gè)類是JUC工具包中對(duì)線程安全問題提供的一種解決方案,它主要是用來(lái)給對(duì)象上鎖,保證同一時(shí)間這能有一個(gè)線程在訪問當(dāng)前對(duì)象,需要的朋友可以參考下
    2023-09-09
  • Java通過HttpClient進(jìn)行HTTP請(qǐng)求的代碼詳解

    Java通過HttpClient進(jìn)行HTTP請(qǐng)求的代碼詳解

    Apache?HttpClient是一個(gè)功能強(qiáng)大且廣泛使用的Java庫(kù),它提供了方便的方法來(lái)執(zhí)行HTTP請(qǐng)求并處理響應(yīng)。本文將介紹如何使用HttpClient庫(kù)進(jìn)行HTTP請(qǐng)求,包括GET請(qǐng)求、POST請(qǐng)求、添加參數(shù)和請(qǐng)求體、設(shè)置請(qǐng)求頭等操作,需要的朋友可以參考下
    2023-05-05
  • SpringBoot集成Redisson實(shí)現(xiàn)消息隊(duì)列的示例代碼

    SpringBoot集成Redisson實(shí)現(xiàn)消息隊(duì)列的示例代碼

    本文介紹了如何在SpringBoot中通過集成Redisson來(lái)實(shí)現(xiàn)消息隊(duì)列的功能,包括RedisQueue、RedisQueueInit、RedisQueueListener、RedisQueueService等相關(guān)組件的實(shí)現(xiàn)和測(cè)試,感興趣的可以了解一下
    2024-10-10
  • 使用Spring Security集成手機(jī)驗(yàn)證碼登錄功能實(shí)現(xiàn)

    使用Spring Security集成手機(jī)驗(yàn)證碼登錄功能實(shí)現(xiàn)

    本文詳細(xì)介紹了如何利用SpringSecurity來(lái)實(shí)現(xiàn)手機(jī)驗(yàn)證碼的注冊(cè)和登錄功能,在登錄過程中,同樣需通過驗(yàn)證碼進(jìn)行驗(yàn)證,文章還提供了相關(guān)的代碼實(shí)現(xiàn)
    2024-10-10
  • Java實(shí)現(xiàn)文件分割與合并

    Java實(shí)現(xiàn)文件分割與合并

    這篇文章主要介紹了Java實(shí)現(xiàn)文件分割與合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Spring?boot配置綁定和配置屬性校驗(yàn)的方式詳解

    Spring?boot配置綁定和配置屬性校驗(yàn)的方式詳解

    這篇文章主要介紹了Spring?boot配置綁定和配置屬性校驗(yàn),SpringBoot 提供了2 種方式進(jìn)行配置綁定,即使用 @ConfigurationProperties 注解和使用 @Value 注解,需要的朋友可以參考下
    2022-05-05
  • 分布式消息隊(duì)列RocketMQ概念詳解

    分布式消息隊(duì)列RocketMQ概念詳解

    RocketMQ?是阿里開源的分布式消息中間件,跟其它中間件相比,RocketMQ?的特點(diǎn)是純JAVA實(shí)現(xiàn),是一套提供了消息生產(chǎn),存儲(chǔ),消費(fèi)全過程API的軟件系統(tǒng),本文詳細(xì)介紹了分布式消息隊(duì)列RocketMQ概念,需要的朋友可以參考下
    2023-05-05
  • 在Spring Boot中如何使用Cookies詳析

    在Spring Boot中如何使用Cookies詳析

    這篇文章主要給大家介紹了關(guān)于在Spring Boot中如何使用Cookies的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • java設(shè)計(jì)模式之建造者模式學(xué)習(xí)

    java設(shè)計(jì)模式之建造者模式學(xué)習(xí)

    建造者模式(Builder Pattern)主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”,在這其中“分步驟”是一個(gè)穩(wěn)定的算法,下面給出了詳細(xì)的示例
    2014-01-01
  • 通過實(shí)例解析spring環(huán)繞通知原理及用法

    通過實(shí)例解析spring環(huán)繞通知原理及用法

    這篇文章主要介紹了通過實(shí)例解析spring環(huán)繞通知原理及用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

金湖县| 淄博市| 宜兰市| 鹤峰县| 邵东县| 合水县| 信阳市| 安徽省| 和顺县| 舒城县| 江北区| 石台县| 铜山县| 海伦市| 贺州市| 台州市| 琼结县| 施秉县| 图木舒克市| 定远县| 太湖县| 七台河市| 东明县| 江北区| 晋江市| 兰西县| 乌什县| 越西县| 剑川县| 永靖县| 兰溪市| 五莲县| 高密市| 兴城市| 四平市| 陆丰市| 大荔县| 芜湖市| 马龙县| 义马市| 贵定县|