马踏棋盘java版


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	


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值