<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了java實現馬踏棋盤的具體程式碼,供大家參考,具體內容如下
馬踏棋盤很好實現,但有時執行起來特別慢,還可能出不來結果,在這裡要用到貪婪演演算法來優化,即找出最難走的路徑,也就是下下步可下棋的位置最少。
下面給出該演演算法完整程式碼:
/* * 馬踏棋盤問題:(貪婪法求解) * 棋盤有64個位置,「日」字走法,剛好走滿整個棋盤 */ //下一個走法的方向類 class Direction{ int x; int y; int wayOutNum; } public class Hores_chessboard_1 { static final int[] dx = { -2, -1, 1, 2, 2, 1, -1, -2 }; // x方向的增量 static final int[] dy = { 1, 2, 2, 1, -1, -2, -2, -1 }; // y方向的增量 static final int N = 8; static int[][] chessboard = new int[N][N]; // 棋盤 /** * * @param nami * @param x,y為棋子的位置 * @return 如果棋子的位置不合法,則返回一個大於8的數。 * 否則返回棋子的下個出路的個數 */ static int wayOut(int x, int y){ int count = 0; int tx, ty, i; //判斷是否超出棋盤邊界,該位置是否已經下過 if(x<0 || x>7 || y<0 || y>7 || chessboard[x][y]!=0){ return 9; } for(i=0; i<N; i++){ tx = x+dx[i]; ty = y+dy[i]; //如果棋子的下個出路可行,則出路數自加一次 if(tx>-1 && tx<8 && ty>-1 && ty<8 && chessboard[tx][ty]==0) count++; } return count; } /** * 按照棋子的下個出路的個數從低到高排序 * @param next 棋子的八個位置的陣列 */ static void sort(Direction[] next){ int i, j, index; Direction temp = null; //這裡用的選擇排序 for(i=0; i<N; i++){ index = i; for(j=i+1; j<N; j++){ if(next[index].wayOutNum > next[j].wayOutNum) index = j; } if(i != index){ temp = next[i]; next[i] = next[index]; next[index] = temp; } } } static void Move(int x, int y, int step){ int i, j; int tx, ty; //如果step==64,則說明每個棋格都走到了,現在只需要列印結果就完了 if(step == N*N){ for(i=0; i<N; i++){ for(j=0; j<N; j++){ System.out.printf("%3d", chessboard[i][j]); } System.out.println(); } System.exit(0); } //下一個棋子的N個位置的陣列 Direction[] next = new Direction[N]; for(i=0; i<N; i++){ Direction temp = new Direction(); temp.x = x+dx[i]; temp.y = y+dy[i]; next[i] = temp; //迴圈得到下個棋子N處位置的下個出路的個數 next[i].wayOutNum = wayOut(temp.x, temp.y); } //配合貪婪演演算法,按下個棋子的下個出路數排序後,next[0]就是下個出路數最少的那個 sort(next); for(i=0; i<N; i++){ tx = next[i].x; ty = next[i].y; chessboard[tx][ty] = step; Move(tx, ty, step+1); /*如果上面Move()往下一步走不通,則回溯到這裡 重置chessboard[tx][ty]為0,接著i++,又迴圈...... */ chessboard[tx][ty] = 0; } } public static void main(String[] args) { int i, j; //初始化棋盤 for(i=0; i<8; i++){ for(j=0; j<8; j++){ chessboard[i][j] = 0; } } System.out.println("請輸入棋子開始位置(0-7):"); Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int y = sc.nextInt(); //第一步不用比較,賦值第一步 chessboard[x][y] = 1; Move(x, y, 2); } }
這裡給出運算結果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援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