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..”]
]
List<List<Integer>> results = new ArrayList<List<Integer>>();
List<Integer> result = new ArrayList<Integer>();
public List<List<String>> solveNQueens(int n) {
List<List<String>> result = new ArrayList<List<String>>();
solveNQueens(n, 0);
char[] chars = new char[n];
//for(char mychar:chars) mychar = '.';//**********!!!!!!!!!!
for(int i = 0;i < n;i++) chars[i] = '.';
for(List<Integer> integers:results){
List<String> strings = new ArrayList<String>();
for(Integer integer:integers){//1 3 0 2
chars[integer] = 'Q';
strings.add(new String(chars));
chars[integer] = '.';
}
result.add(strings);
}
return result;
}
public void solveNQueens(int n,int currentLine){
if(currentLine == n) {
List<Integer> integers = new ArrayList<Integer>();
integers.addAll(result);
results.add(integers);
}
else{
for(int i = 0;i < n;i++){
boolean placeAble = true;
if(currentLine != 0){
if(result.contains(i))
placeAble = false;
else
for(int j = 0;j < currentLine;j++){
if((Math.abs(result.get(j)-i)) == currentLine - j){
placeAble= false;
break;
}
}
}
if(placeAble == true)
{ result.add(i);
solveNQueens(n,currentLine+1);
result.remove(currentLine);
}
}
}
}