您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java實現(xiàn)馬踏棋盤游戲算法的代碼怎么寫”,在日常操作中,相信很多人在Java實現(xiàn)馬踏棋盤游戲算法的代碼怎么寫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java實現(xiàn)馬踏棋盤游戲算法的代碼怎么寫”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
大家可以把棋盤改小一些測試,8x8的確實很慢
import java.util.Arrays; /** * 騎士周游問題 * @author LM_Code * @create 2019-03-17-18:57 */ public class KnightProblem { static final int SIZE = 8;//設置棋盤的行數(shù)和列數(shù)>=5時才有解 static final int[][] A = new int[SIZE][SIZE];//初始化棋盤,數(shù)組中所有值默認為0 static final int[] NEXT= new int[]{1, 2};//設置馬的下一步,用空間為2的數(shù)組代替x,y坐標 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]};//將當前步存入本次方法調(diào)用的局部變量 A[current[0]][current[1]] = tag;//把馬跳到當前位置,并標記為是第幾步 // 如果是最后一步,遞歸結(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種情況是否有解 } //如果當前步無法走完棋盤(無解) A[current[0]][current[1]] = 0;//回溯:撤銷當前步,當前步賦值為0 return false;//返回false,回到上一步,表明此步無解 } //判斷下一步是否能走,下一步有8中情況0-7,傳入當前步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; } }
到此,關于“Java實現(xiàn)馬踏棋盤游戲算法的代碼怎么寫”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。