資源簡介
JAVA實現騎士巡游(馬踏棋盤)
8X8格
輸入起始X軸Y軸坐標

代碼片段和文件信息
import?java.applet.applet;
import?java.awt.Graphics;
import?java.awt.Color;
import?javax.swing.JOptionPane;
import?java.awt.Font;
//提供二元型數值
class?Pair
{
?private?int?x;
?private?int?y;
//?Pair()
//?{
//?}
?Pair(int?aint?b)
?{
??x=a;
??y=b;
?}
?public?int?getX()
?{
??return?x;
?}
?public?int?getY()
?{
??return?y;
?}
}
//提供巡游結果
class?GetKnightCruise
{
?//存儲8*8棋盤上各位置為第幾步
?private?static?int[][]?arr=new?int[8][8];
?//用來存儲騎士可以到達的8個位置的偏移量
?private?static?Pair[]?index=new?Pair[8];
?//設置index的初始值
?
?int?ab;
?private?static?void?setIndex()
?{
??index[0]=new?Pair(-21);
??index[1]=new?Pair(-12);
??index[2]=new?Pair(12);
??index[3]=new?Pair(21);
??index[4]=new?Pair(2-1);
??index[5]=new?Pair(1-2);
??index[6]=new?Pair(-1-2);
??index[7]=new?Pair(-2-1);
?}
?//設置棋盤位置的處始值
?private?static?void?setArr()
?{
?
??for?(int?i=0;i<8;i++)
??{
???for?(int?j=0;j<8;j++)
???{
????arr[i][j]=0;
???}
??}
?
?}
?//計算位置(ij)的出口數
?private?static?int?getExitNum(int?iint?j)
?{
??int?num=0;
??for(int?t=0;t<8;t++)
??{
???if(i+index[t].getX()>=0&&i+index[t].getX()<=7&&j+index[t].getY()>=0&&j+index[t].getY()<=7&&arr[i+index[t].getX()][j+index[t].getY()]==0)
???{
????num++;
???}
??}
??return?num;
?}
?//選擇下一個所走的位置,beginIndex的作用是定位選擇優先權的起始位置
?private?static?Pair?getNextPositioin(int?iint?jint?beginIndex)
?{
??int[]?temp=new?int[8];
??int?min=8;
??for(int?t=0;t<8;t++)
??{
???if(i+index[t].getX()>=0&&i+index[t].getX()<=7&&j+index[t].getY()>=0&&j+index[t].getY()<=7&&arr[i+index[t].getX()][j+index[t].getY()]==0)
???{
????temp[t]=getExitNum(i+index[t].getX()j+index[t].getY());
????if(temp[t]!=0&&temp[t] ????{
?????min=temp[t];
????}
???}
??}
??for(int?t=0;t<8;t++)
??{
???int?h=(t+beginIndex)%8;
???if(temp[h]==min)
???{
????return?new?Pair(i+index[h].getX()j+index[h].getY());
???}
??}
??return?new?Pair(-1-1);
?}
?//尋找下一個唯一的出口(主要給最后一步使用,因為getNextPositioin已經不適合了)
?private?static?Pair?getNextPositioinOfTheLastStep(int?iint?j)
?{
??for(int?t=0;t<8;t++)
??{
???if(i+index[t].getX()>=0&&i+index[t].getX()<=7&&j+index[t].getY()>=0&&j+index[t].getY()<=7&&arr[i+index[t].getX()][j+index[t].getY()]==0)
???{
????return?new?Pair(i+index[t].getX()j+index[t].getY());
???}
??}
??return?new?Pair(-1-1);
??
?}
?//從(ij)開始騎士巡游
?static?int[][]?getKnightCruise(int?iint?j)
?{?
??Pair?tt;
??setArr();
??setIndex();
??for(int?q=0;q<8;q++)
??{
???int?ii=ijj=j;
???int?p=0;
???for(p=1;p<=64;p++)
???{
????arr[ii][jj]=p;
????if(p==63)
????{
?????tt=getNextPositioinOfTheLastStep(iijj);
?????ii=tt.getX();
?????jj=tt.getY();
?????continue;
????}
????tt=getNextPositioin(iijjp);
????ii=tt.getX();
????jj=tt.getY();
????if(ii==-1||jj==-1)
????{
?????break;
????}
???}
???if(p==65)
???{
?//?return;?
????return?arr;
???}
??}
????return?arr;
?}
?//得到巡游數組
?public?static?int[][]?getResult()
?{
?//?int?i=0j=0;
??int?i=1j=1;
??getKnightCruise(ij);
??return
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2134??2009-11-13?15:09??馬踏棋盤問題\GetKnightCruise.class
?????文件???????2068??2009-11-13?15:09??馬踏棋盤問題\mataqipanqiujiewenti1.class
?????文件???????4633??2007-06-30?10:55??馬踏棋盤問題\mataqipanqiujiewenti1.java
?????文件????????115??2007-05-16?22:38??馬踏棋盤問題\mataqipanwenti.html
?????文件????????383??2009-11-13?15:09??馬踏棋盤問題\Pair.class
?????目錄??????????0??2009-11-13?15:09??馬踏棋盤問題
-----------?---------??----------?-----??----
?????????????????9333????????????????????6
評論
共有 條評論