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.."] ]
Java Solutions( Refer to blog http://blog.csdn.net/mbh_1991/article/details/23869459 and http://blog.csdn.net/u011095253/article/details/9158473 ):
public class Solution {
public ArrayList<String[]> solveNQueens(int n) {
ArrayList<String[]> results=new ArrayList<String[]>();
int[] location=new int[n];
dfs(results,location,0,n);
return results;
}
private void dfs(ArrayList<String[]> results,int[] location,int cur,int n){
if(cur==n)
saveResult(results,location,n);
else{
for(int i=0;i<n;i++){
location[cur]=i;
if(isValid(location,cur))
dfs(results,location,cur+1,n);
}
}
}
private void saveResult(ArrayList<String[]> results,int[] location,int n){
String[] answer=new String[n];
for(int i=0;i<n;i++){
String row="";
for(int j=0;j<n;j++){
if(location[i]==j) row+="Q";
else row+=".";
}
answer[i]=row;
}
results.add(answer);
}
private boolean isValid(int[] location,int cur){
for(int i=0;i<cur;i++){
if(location[i]==location[cur]||Math.abs(location[i]-location[cur])==(cur-i))
return false;
}
return true;
}
}