The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the
n-queens‘ placement, where ‘Q‘ and ‘.‘ both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."]]
回溯法。
public void generateSolution(int [] record,int n, List<String []> result){ //Java
String [] solution = new String[n];
for(int i =0; i < n; i++){
String row = "";
for(int j = 0; j < n; j++){
if(record[i]-1 == j)
row += "Q";
else row +=".";
}
solution[i] = row;
}
result.add(solution);
}
public boolean check_pos(int index, int loop, int [] record){
for(int i = 0; i < index; i++){
if(record[i] == loop)
return false ;
if(record[i]+i == index + loop)
return false ;
if(record[i] -loop == i - index )
return false ;
}
return true;
}
public void subNQueen(int [] record,int index, List<String[]> result, int n){
if(index == n){
generateSolution(record, n,result);
}
for(int loop = 1; loop <=n; loop++){
if(check_pos(index, loop, record)){
record[index] = loop;
subNQueen(record,index+1,result,n);
record[index] = 0;
}
}
}
public List<String[]> solveNQueens(int n) {
int index = 0;
int [] record = new int[n];
List<String [] > result = new ArrayList<String []>();
subNQueen(record,0,result,n);
return result;
}原文地址:http://blog.csdn.net/chenlei0630/article/details/42063885