package com.recursion.implementation; public class EightQueen { //定义一个max表示有多少个皇后 int max = 8; //定义一个数组表达有多少种解法 int []array = new int[max]; //一位数组的下标+1表示在第几行,数组的元素表示在第几列 int Test=1; public static void main(String[] args) { EightQueen Test = new EightQueen(); Test.check(0); } //方法,放置第n个皇后 //第一行第一列的方法为:1*8^7 private void check(int n) { if(n == max) {//n == 8 表示结束 printf();//结束时打印 return; } //如果没有到最后则依次放入 for (int i = 0; i < max; i++) { //先把当前的皇后放到该行的第1列,如果不行依次判断 array[n] = i; if(Judge(n)) { //如果不冲突则开始放下一个皇后(下一行),开始递归 check(n+1); } //如果冲突就继续执行array[n] = i;则判断下一列 } } //查看放置皇后是否冲突 //参数n表示传递过来第几个皇后,然后将原始数组判断是否在一列或者一条斜线上 //下标==行 val==列 public boolean Judge(int n) { for (int i = 0; i < n; i++) { if (array[i] == array[n] || Math.abs(n-i) == Math.abs(array[n] - array[i])) { //第一个判断表示在同一列上 || 第二个判断是表示判断是否放在同一斜线上 return false; } } return true; } //打印出摆放的位置 public void printf() { System.out.print("第"+Test+"次:"); for (int i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } System.out.println(); Test++; } }