<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
馬踏棋盤很好實現,但有時執行起來特別慢,還可能出不來結果,最常用的就是深度優先遍歷+回溯,相信大家都學過資料結構,對圖的深度遍歷都有了解,下面就是程式碼的實現,如果對程式碼理解有困難,可以先熟悉一下圖的深度優先遍歷
大家可以把棋盤改小一些測試,8x8的確實很慢
import java.util.Arrays; /** * 騎士周遊問題 * @author LM_Code * @create 2019-03-17-18:57 */ public class KnightProblem { static final int SIZE = 8;//設定棋盤的行數和列數>=5時才有解 static final int[][] A = new int[SIZE][SIZE];//初始化棋盤,陣列中所有值預設為0 static final int[] NEXT= new int[]{1, 2};//設定馬的下一步,用空間為2的陣列代替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]};//將當前步存入本次方法呼叫的區域性變數 A[current[0]][current[1]] = tag;//把馬跳到當前位置,並標記為是第幾步 // 如果是最後一步,遞迴結束 if(tag == SIZE*SIZE){ return true; } //如果不是最後一步,下一步有8中可能 for (int i = 0; i < 8; i++) { //下一步的第i種情況是否可走 if(canGo(current, i)){//如果可以走,繼續遞迴 //判斷此時的下一步,是否能走完棋盤 if(method(NEXT, tag+1)){//能,返回true,遞迴結束 return true; } //此時的下一步不能走完棋盤,則繼續尋找第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; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45