java求解八皇后问题

         八皇后问题:要求在8x8的国际棋盘上摆放8个皇后,且每个皇后不与其他皇后处于同一行,同一列,同一斜线上。

     求解思路

  1. 在棋盘(1,1)这个位置开始摆放第一个皇后,依顺序摆放直到放完(1,8)这个位置,结束循环
  2. 在第前一轮的皇后(i,j)摆放完后,立刻进入下一轮在(i+1)行找到符合条件的位置摆放皇后
  3. 如果无法在(i+1)行找到符合条件的位置,则返回到上一轮循环,继续测试j-8之间的位置
  4. 每次在第8行成功摆放后,立刻输出一个解

     代码编写思路:

  1. 创建一个一维数组用于存储某一轮的结果,数组的索引值+1表示第多少行,对应的值表示第多少列
  2. 创建一个计数器用来统计结果数
  3. 创建一个方法用来判断给定的位置是否符合条件
  4. 创建一个输出函数用来输出所有解的结果

主循环

public int queenEight(int[] val,int n,int num) {	
		for (int i = 1; i <= 8; i++) {		
			boolean flag =jud(n+1, val, i);		
			if(n==0) {	
				val[0] =i;			
				num=queenEight(val,n+1,num);
				
			}else if(n>0 && n<8 && flag){
				val[n] =i;		
				num=queenEight(val, n+1,num);
				if(n==7) {
					num++;
					printAn(val, num);
				}
			}else {		
				continue;				
			}
		}
		return num;
	}

   判断函数

public boolean jud(int y,int[] val,int x) {
		boolean passWay = true;
		for (int i = 0; i <y-1; i++) {
			int y0 = i+1;
			int x0 = val[i];
			boolean flag1 =abs(x-x0)!=abs(y-y0) ;
			boolean flag2 = x!=x0;
			if(flag1 && flag2) {
				continue;
			}else {
				passWay = false;
				break;
			}
		}
		
		return passWay;
	}

输出函数

//输出八皇后问题的答案
	public void printAn(int [] val,int num) {
		System.out.println("========这是第"+num+"组解=======");
		for (int i = 0; i < val.length; i++) {
			System.out.println(String.format("第%s行的第%s列摆放第%s个皇后",(i+1),val[i],(i+1)));
		}	
	}

结果:

 输出最终结果共92种解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值