package经典;public classKnight {/***@paramargs*/
public static voidmain(String[] args) {//TODO Auto-generated method stub
int[][] board=new int[8][8];
Knight knight=newKnight();if(knight.travel(4,4,board))
{
System.out.println("骑士游历完成");
printArray(board);
}else{
System.out.println("骑士游历失败");
printArray(board);
}
}private static void printArray(int[][] board) {//TODO Auto-generated method stub
for(int i=0; i
{for( int j=0; j
System.out.printf("%8d",board[i][j]);
System.out.println();
}
}public static boolean travel(int startx,int starty,int[][]board){for(int i=0; i
board[i][j]=0;int[] ktmovex={2,1,2,1,-2,-1,-2,-1};int[] ktmovey={1,2,-1,-2,1,2,-1,-2};int x=startx;int y=starty;
board[startx][starty]=1;//测试下一步的出路
int[] nextx=new int[board.length];int[] nexty=new int[board.length];//记录出路的个数
int []exists=new int[board.length];for(int i=0; i
exists[i]=0;for(int i=2; i
{int count=0;inttempx;inttempy;for(int j=0; j
{
tempx=x+ktmovex[j];
tempy=y+ktmovey[j];if(tempx<0 || tempx>7 || tempy<0 || tempy>7)continue;if(board[tempx][tempy]==0)
{
nextx[count]=tempx;
nexty[count]=tempy;
count++;
}
}int min=-1;if(count==0)return false;else if(count==1)
min=0;else{for(int n=0; n
{for(int m=0; m
{
tempx=nextx[n]+ktmovex[m];
tempy=nexty[n]+ktmovey[m];if(tempx<0 || tempx>7|| tempy<0 || tempy>7)continue;if(board[tempx][tempy]==0)
{
exists[n]++;
}
}
}
}int temp=exists[0];
min=0;for(int k=1; k
{if(temp>exists[k])
{
temp=exists[k];
min=k;
}
}
x=nextx[min];
y=nexty[min];
board[x][y]=i;
}return true;
}
}