import java.util.Scanner;
/**
* 先算出每个点 的可行方案数,每次选择最少的进行探索,循环8*64次就可以得出结果
* @author wangmeng
*
*/
public class 马踏棋盘java版 {
static Integer x,y;
static int path[][] = { { 0, 0, 0 }, { 1, 1, 2 }, { 2, 1, -2 }, { 3, -1, 2 },
{ 4, -1, -2 }, { 5, 2, 1 }, { 6, 2, -1 }, { 7, -2, 1 },
{ 8, -2, -1 } };
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入初始坐标x,y(1<=x<=8,1<=y<=8)");
String s = scan.nextLine();
String[] str = s.split(",");
x = Integer.parseInt(str[0]);//初始x坐标
y = Integer.parseInt(str[1]);//初始y坐标
int[][] way = new int[9][9];
init(way,path);
}
private static void init(int[][] way, int[][] path) {
for(int i = 1;i<=8;i++)
for(int j = 1;j<=8;j++)
way[i][j]=0;
for(int i = 1;i<=8;i++){
for(int j = 1;j<=8;j++){
for(int k = 1;k<=8;k++){
int x = i;
int y = j;
if(x+path[k][1]>=1
&&x+path[k][1]<=8
&&y+path[k][2]>=1
&&y+path[k][2]<=8){
way[i][j]++;
}
}
}
}
jisuan(x,y,way,path);
}//初始化完成
//计算整个棋盘
private static void jisuan(Integer x, Integer y, int[][] way,
int[][] path) {
int[][] outPut = new int[9][9];
int a=0;
int b=0;
int m,n;
if(x>=1&&x<=8&&y>=1&&y<=8){//判断坐标是否合法
for(int z = 1;z<=64;z++){
int min = 8;
outPut[x][y] = z;//
way[x][y]=0;//走过的点可走路径设置为0
for(int k = 1;k<=8;k++){
m = x + path[k][1];
n = y + path[k][2];//m,n表示下一个要走的点
if(m>=1&&m<=8&&n>=1&&n<=8)//符合条件,可走
if(way[m][n]!=0)//不等于0 说明此点没走过
{ way[m][n]--;//可走方案数减一
if(way[m][n]<=min){//如果可走方案数小于min
min = way[m][n];//令min=way[m][n]
a = m;
b = n;
}
}
}
x = a;
y = b;
}
}
for(int i = 1;i<=8;i++){
for(int j = 1 ;j<=8;j++){
System.out.print(outPut[i][j]+"\t");
}
System.out.println();
}
}
}
运行结果:
请输入初始坐标x,y(1<=x<=8,1<=y<=8)
1,1
1 34 3 18 37 32 13 16
4 19 36 33 14 17 58 31
35 2 41 38 49 60 15 12
20 5 48 53 40 57 30 59
47 42 39 50 61 52 11 26
6 21 54 45 56 27 64 29
43 46 23 8 51 62 25 10
22 7 44 55 24 9 28 63
马踏棋盘java版
最新推荐文章于 2022-12-23 17:43:07 发布