n-皇后问题和求解置换问题类似,条件更加加强了一些
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args){
Solution s = new Solution();
s.solveNQueens(4);
}
public List<List<String>> solveNQueens(int n) {
List<List<String>> res = new ArrayList<List<String>>();
List<Integer> tmp = new ArrayList<Integer>();
solveNQueens(res,tmp,n);
return res;
}
private void solveNQueens(List<List<String>> res, List<Integer> tmp, int n) {
// TODO Auto-generated method stub
if(tmp.size()==n){
//TODO
List<String> elem = new ArrayList<String>();
for(int j=0;j<=n-1;j++){
int val = tmp.get(j);
String s = "";
for(int h=0;h<=n-1;h++){
if(h!=val){
s += ".";
}else{
s += "Q";
}
}
elem.add(s);
}
res.add(elem);
}else{
for(int i=start;i<n;i++){
if(!is_part_of_solution(tmp,i)) continue;
tmp.add(i);
solveNQueens(res,tmp,n);
tmp.remove(tmp.size()-1);
}
}
}
private boolean is_part_of_solution(List<Integer> tmp, int i) {
// TODO Auto-generated method stub
int len = tmp.size();
for(int j=0;j<len;j++){
if(i==tmp.get(j)||i+len==j+tmp.get(j)||i-len==j-tmp.get(j)){
return false;
}
}
return true;
}
}