/**
* @author Administrator
*骑士走棋盘问题:
*先走较难走的位置
*但是可能不会有合适解
*/
public class KnightTour {
private static final int ROW = 8;
private static final int COLUMN = 8;
private static KnightTour kt = new KnightTour();
//棋盘,初始值为0,表示该点未被走过
public static int board[][]= new int[ROW][COLUMN];
public static void main(String[] args) {
// TODO 自动生成的方法存根
int startx,starty;
System.out.println("请输入起点");
startx = 0;
starty = 0;
//System.out.println(kt.travel(0, 0));
if(kt.travel(startx,starty)== 1)
System.out.println("游历完成");
else
System.out.println("游历失败");
for(int i=0;i<ROW;i++)
{
for(int j=0;j<COLUMN;j++)
System.out.print(" " + board[i][j]);
System.out.println();
}
}
public int travel(int x,int y)
{
//8个方向
int ktmovex[] = {-2,-1,1,2,2,1,-1,-2};
int ktmovey[] = {1,2,2,1,-1,-2,-2,-1};
//测试下一步走法
int nexti[] = new int[8];
int nextj[] = new int[8];
//记录出路的个数
int exists[] = new int[ROW];
int i,j,l,m;
int tempi,tempj;
int count,min,temp;
i = x;
j = y;
board[i][j] = 1;
for(m=2;m<=ROW*COLUMN;m++)
{
for(l=0;l<ROW;l++)
exists[l] = 0;
l = 0;
//试探8个方向
for(int k = 0;k < 8;k ++)
{
tempi = i + ktmovex[k];
tempj = j + ktmovey[k];
//到达边界,不可走
if(tempi < 0 || tempj < 0||tempi > ROW-1|| tempj > COLUMN-1)
//return 0;
continue;
//若该方向可走,记录
if(board[tempi][tempj] == 0)
{
nexti[l] = tempi;
nextj[l] = tempj;
//可走方向加1
l ++;
}
//System.out.println(l);
}
count = l;
//System.out.println(count + "$");
//如果可走方向个数为0,直接返回
if(count == 0)
return 0;
else if(count == 1)
{
//仅有一个可走方向,该方向即为最少出路方向
min = 0;
}
else
{
//找出下一个位置的出路数
for(l=0;l<count;l++)
{
for(int k=0;k<ROW;k++)
{
tempi = nexti[l] + ktmovex[k];
tempj = nextj[l] + ktmovey[k];
if(tempi<0||tempj<0||tempi>ROW-1||tempj>COLUMN-1)
continue;
if(board[tempi][tempj] == 0)
exists[l] ++;
}
}
}
temp = exists[0];
min = 0;
//从可走的方向最少出路方向
for(l=1;l<count;l++)
{
if(exists[l] < temp)
{
temp = exists[l];
min = l;
}
}
//走最少出路数方向
i = nexti[min];
j = nextj[min];
board[i][j] = m;
}
return 1;
}
}
骑士走棋盘
原文作者:骑士周游问题
原文地址: https://blog.csdn.net/XxuelangL/article/details/21230497
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/XxuelangL/article/details/21230497
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。