借鉴:http://blog.csdn.net/baple/article/details/7181404
package database;
public class NQuee {
public static boolean Verify(int arr[],int i){ //仅仅判断能不能放置这个皇后
for(int k =1;k != i;k++) //与前i-1行进行比较
if(Math.abs(k-i)==Math.abs(arr[i]-arr[k]) || arr[i] == arr[k]) //具体比较的方法;
return false;
return true;
}
public static void NQuee(int arr[] , int i , int n){
for(int j = 1;j!=n+1;j++){ //这里是 尝试着往 第i行添加皇后
arr[i] = j; //尝试着往(i,arr[i])添加皇后
//这里注意:arr[i],而i是从1开始的,那么说arr[]要开辟n+1个空间
if(Verify(arr, i)){ //利用递归开始进行回溯算法
if(i == n) //考虑是如何进行回溯的?见PPT
ResultPrint(arr,n);
else
NQuee(arr, i+1, n);
}
}
}
public static void ResultPrint(int arr[],int n){
for(int a =1 ;a!=n+1 ;a++)
System.out.print(a+","+arr[a]+";");
}
public static void main(String[] args) {
int n = 4;
int arr[] = new int[n+1]; //为什么是n+1?
NQuee(arr,1,n);
}
}