1 package DiGui; 2 3 import java.lang.reflect.Array; 4 5 /* 6 * 利用递归实现8皇后问题 7 */ 8 public class EightQueen { 9 10 11 int max=4; 12 int []array=new int[max]; 13 static int count=0; 14 15 16 public static void main(String[] args){ 17 18 EightQueen q=new EightQueen(); 19 q.setQueen(0); 20 System.out.println(count); 21 22 } 23 24 25 26 27 public void print(){ 28 for(int i=0;i<array.length;i++){ 29 System.out.print(array[i]+" "); 30 } 31 System.out.println(); 32 } 33 34 35 //判断当前皇后是否和之前已经摆好的的任意一个皇后在同一列或者同一斜线上。是的话返回false,否则返回true 36 public boolean judge(int n){ 37 for(int i=0;i<n;i++){ 38 if(array[n]==array[i]||Math.abs(n-i)==Math.abs(array[n]-array[i])){ 39 return false; 40 } 41 } 42 return true; 43 } 44 45 46 //将皇后从0-7逐个放置入相应的符合规定的位置 47 public void setQueen(int n){ 48 if(n==max){ 49 print(); 50 count++; 51 return; 52 } 53 for(int i=0;i<max;i++){ 54 array[n]=i; 55 System.out.println("第"+n+"行"+"----------第"+i+"列"); 56 if(judge(n)){ 57 System.out.println("第"+n+"行"+"************第"+i+"列"); 58 setQueen(n+1); 59 } 60 } 61 } 62 }
运行结果:
第0行----------第0列
第0行************第0列
第1行----------第0列
第1行----------第1列
第1行----------第2列
第1行************第2列
第2行----------第0列
第2行----------第1列
第2行----------第2列
第2行----------第3列
第1行----------第3列
第1行************第3列
第2行----------第0列
第2行----------第1列
第2行************第1列
第3行----------第0列
第3行----------第1列
第3行----------第2列
第3行----------第3列
第2行----------第2列
第2行----------第3列
第0行----------第1列
第0行************第1列
第1行----------第0列
第1行----------第1列
第1行----------第2列
第1行----------第3列
第1行************第3列
第2行----------第0列
第2行************第0列
第3行----------第0列
第3行----------第1列
第3行----------第2列
第3行************第2列
1 3 0 2
第3行----------第3列
第2行----------第1列
第2行----------第2列
第2行----------第3列
第0行----------第2列
第0行************第2列
第1行----------第0列
第1行************第0列
第2行----------第0列
第2行----------第1列
第2行----------第2列
第2行----------第3列
第2行************第3列
第3行----------第0列
第3行----------第1列
第3行************第1列
2 0 3 1
第3行----------第2列
第3行----------第3列
第1行----------第1列
第1行----------第2列
第1行----------第3列
第0行----------第3列
第0行************第3列
第1行----------第0列
第1行************第0列
第2行----------第0列
第2行----------第1列
第2行----------第2列
第2行************第2列
第3行----------第0列
第3行----------第1列
第3行----------第2列
第3行----------第3列
第2行----------第3列
第1行----------第1列
第1行************第1列
第2行----------第0列
第2行----------第1列
第2行----------第2列
第2行----------第3列
第1行----------第2列
第1行----------第3列
2
原文:https://www.cnblogs.com/Leeyoung888/p/14468367.html