Java 骑士周游

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 骑士周游相关的知识,希望对你有一定的参考价值。

把c语言中的 国际象棋中的骑士周游 改为 JAVA 但不知有什么问题?
public class Knight
int i,j,min;
int count[]=8,8,8,8,8,8,8,8;
int num[]=0,0,0,0,0,0,0,0;
int col[]=2,1,-1,-2,-2,-1,1,2;
int row[]=-1,-2,-2,-1,1,2,2,1;
int a[][]=new int[8][8];
int Ma[][] = new int[65][3];
int top=0;
public Knight(int x,int y)

i=x;
j=y;
top=0;
for(int i=0;i<8;i++)

for(int j=0;j<8;j++)
a[i][j]=0;

for(int i = 0;i < 65;i++)
for(int j = 0;j < 3;j++)
Ma[i][j] = 0;
push(a,i,j,0);

public void push(int a[][],int i,int j,int m)

Ma[top][0]=i;
Ma[top][1]=j;
Ma[top][2]=m;
a[i][j]=++top;;

public void Start()

int ti,tj,temp1=0,temp=0,flag=0;
while(top<64)

ti=i;tj=j;temp1=0;flag=0;
for(int t=temp;t<8;t++,temp1++)

ti+=row[t];tj+=col[t];
if(judge(ti,tj,a))

count[temp1]=jump(ti,tj,a);
num[temp1]=t;
flag=1;

ti-=row[t];tj-=col[t];
if(flag==1)

min=sort(count,num);
ti+=row[min];tj+=col[min];
push(a,ti,tj,min);
i=ti;j=tj;temp=0;

else

temp=pop(a);
i=Ma[top-1][0];
j=Ma[top-1][1];

System.out.println();
disp(a);


public int sort(int a[],int b[])

int Min=a[0],tt=0;
for(int k=1;k<8;k++)

if(Min>a[k]&&a[k]>-1&&a[k]<8)

Min=a[k];
tt=b[k];


return tt;

public int pop(int a[][])

int ttemp;
top--;
a[Ma[top][0]][Ma[top][1]]=0;
Ma[top][0]=0;
Ma[top][1]=0;
ttemp=Ma[top][2]+1;
Ma[top][2]=0;
return ttemp;

public boolean judge(int i,int j,int a[][])

if(i>=0&&j>=0&&i<8&&j<8&&a[i][j]==0)
return true;
return false;

public void disp(int a[][])

for(int ii=0;ii<8;ii++)

for(int jj=0;jj<8;jj++)

System.out.printf("%4d", a[ii][jj]);


System.out.println();



public int jump(int i,int j,int a[][])

int count=0,tii=i,tjj=j;
for(int t=0;t<8;t++)

tii+=row[t];tjj+=col[t];
if(judge(tii,tjj,a))
count++;
tii-=row[t];tjj-=col[t];

return count;


================================================================
import java.util.Random;
public class KnightTest
public static void main(String args[])

Random rand = new Random();
int x=1+rand.nextInt(8);
int y=1+rand.nextInt(8);
Knight knight = new Knight(x-1, y-1);
knight.Start();


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

参考技术A 你没测试好吧。应该没问题啊 参考技术B 没问题~~你再测试下~! 参考技术C 没有问题

以上是关于Java 骑士周游的主要内容,如果未能解决你的问题,请参考以下文章

程序员必会十大算法之骑士周游问题

马踏棋盘(骑士周游问题)

算法马踏棋盘算法 骑士走周游算法

骑士周游问题

45-骑士周游问题

Python----DFS---骑士周游问题