骑士走棋盘.doc
上传人:sy****28 上传时间:2024-09-10 格式:DOC 页数:4 大小:43KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

骑士走棋盘.doc

骑士走棋盘.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"file:///C:\\Users\\Administrator\\Desktop\\常见算法\\AlgorithmGossip\\AlgorithmGossip\\AlgorithmGossip.htm"AlgorithmGossip:骑士走棋盘说明:骑士旅游(Knighttour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完所有的位置?演算法FOR(m=2;m<=总步数;m++)[测试下一步可以走的八个方向,记录可停留的格数count。IF(count==0)[游历失败]ELSEIF(count==1)[下一步只有一个可能]ELSE[找出下一步的出路最少的格子如果出路值相同,则选第一个遇到的出路。]走最少出路的格子,记录骑士的新位置。]Java实作/**八方骑士,马踏棋盘*@authorgxilizq**/importjava.util.Scanner;publicclassKnightTravel{publicbooleantravel(intstartX,intstartY,int[][]board){//对应骑士可走的八个方向int[]ktmove1={-2,-1,1,2,2,1,-1,-2};int[]ktmove2={1,2,2,1,-1,-2,-2,-1};//下一步出路的位置int[]nexti=newint[board.length];int[]nextj=newint[board.length];//记录出路的个数int[]exists=newint[board.length];intx=startX;inty=startY;board[x][y]=1;for(intm=2;m<=Math.pow(board.length,2);m++){for(intk=0;k<board.length;k++){exists[k]=0;}intcount=0;//试探八个方向for(intk=0;k<board.length;k++){inttmpi=x+ktmove1[k];inttmpj=y+ktmove2[k];//如果是边界了,不可走if(tmpi<0||tmpj<0||tmpi>7||tmpj>7){continue;}//如果这个方向可走,记录下来if(board[tmpi][tmpj]==0){nexti[count]=tmpi;nextj[count]=tmpj;//可走的方向加一个count++;}}intmin=-1;if(count==0){returnfalse;}elseif(count==1){min=0;}else{//找出下一个位置的出路数for(intl=0;l<count;l++){for(intk=0;k<board.length;k++){inttmpi=nexti[l]+ktmove1[k];inttmpj=nextj[l]+ktmove2[k];if(tmpi<0||tmpj<0||tmpi>7||tmpj>7){continue;}if(board[tmpi][tmpj]==0)exists[l]++;}}inttmp=exists[0];min=0;//从可走的方向中寻找最少出路的方向for(intl=1;l<count;l++){if(exists[l]<tmp){tmp=exists[l];min=l;}}}//走最少出路的方向x=nexti[min];y=nextj[min];board[x][y]=m;}returntrue;}publicstaticvoidmain(String[]args){intstartX,startY;System.out.print("输入起始点:");Scannerin=newScanner(System.in);startX=in.nextInt();startY=in.nextInt();int[][]board=newint[8][8];KnightTravelknight=newKnightTravel();if(knight.travel(startX,startY,board)){System.out.println("游历完成!");}else{System.out.println("游历失败!");}for(inti=0;i<board.length;i++){fo