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 

输出函数

//输出八皇后问题的答案
	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)));
		}	
	}

结果:

java求解八皇后问题_第1张图片

 输出最终结果共92种解。

你可能感兴趣的:(java学习,java)