public class Queen {
private static final int n = 10;
private static int[] val = new int[n];
/**
* 确定r行已放置的皇后是否可以
* @param r:行号
*/
public boolean isPlace(int r){
boolean b = true;
for(int i = 0; i < r; i++){
if (val[r] == val[i] || Math.abs(val[r] - val[i]) == Math.abs(r -i)) {
b = false;
break;
}
}
return b;
}
/**
* 递归法实现N皇后问题,确定每一行皇后放置位置
* @param r:行号,从0到n-1
*/
public void traceBackQueen(int r) {
if (r == n) {
print();
}else {
for (int i = 0; i < n; i++) {
val[r] = i;
if (isPlace(r)) {
traceBackQueen(r+1);
}
}
}
}
/**
* 打印结果
*/
public void print(){
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j == val[i]) {
System.out.print("("+ i + "," + j +")" + "/t");
}
}
}
System.out.println();
}
/*
* test
*/
public static void main(String[] args){
Queen queen = new Queen();
queen.traceBackQueen(0);
}
}
private static final int n = 10;
private static int[] val = new int[n];
/**
* 确定r行已放置的皇后是否可以
* @param r:行号
*/
public boolean isPlace(int r){
boolean b = true;
for(int i = 0; i < r; i++){
if (val[r] == val[i] || Math.abs(val[r] - val[i]) == Math.abs(r -i)) {
b = false;
break;
}
}
return b;
}
/**
* 递归法实现N皇后问题,确定每一行皇后放置位置
* @param r:行号,从0到n-1
*/
public void traceBackQueen(int r) {
if (r == n) {
print();
}else {
for (int i = 0; i < n; i++) {
val[r] = i;
if (isPlace(r)) {
traceBackQueen(r+1);
}
}
}
}
/**
* 打印结果
*/
public void print(){
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j == val[i]) {
System.out.print("("+ i + "," + j +")" + "/t");
}
}
}
System.out.println();
}
/*
* test
*/
public static void main(String[] args){
Queen queen = new Queen();
queen.traceBackQueen(0);
}
}