N皇后问题(java)
一、递归法(有局限性,N太大可能导致栈溢出)
package com.lxf.demo03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Queen {
private static final int N=20;
private static int[] q=new int[N];
private static int count=0;
public static void main(String[] args) throws IOException {
int n;
System.out.println(" 皇后问题(n<20)n=");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
n = Integer.valueOf(br.readLine());
if(n>20){
System.out.println("n的值太大不能求解");
}else{
System.out.println("n皇后问题求解如下:");
queen(1, n);
}
}
public static void dispasolution(int n){
System.out.println("第"+(++count)+"个解");
for (int i = 1; i <= n; i++) {
System.out.println("("+i+","+q[i]+")");
}
}
public static boolean place(int i,int j){
if(i==1) {
return true;
}
int k=1;
while(k<i){
if((q[k]==j)||(Math.abs(q[k]-j)==Math.abs(i-k))){
return false;
}
k++;
}
return true;
}
public static void queen(int i,int n){
if (i>n) {
dispasolution(n);
}else{
for (int j = 1; j <= n; j++) {
if(place(i, j)){
q[i]=j;
queen(i+1, n);
}
}
}
}
}