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) ;
}
}
}
}
}