DFS思想
1.
import java.util.List;
import java.util.ArrayList;
public class test {
public List<List<String>> solveNQueens(int n) {
List<List<String>> allList = new ArrayList<>();
List<Integer> list = new ArrayList<>();
boolean nums[] = new boolean[n];
for(int i=0;i<n;i++){
nums[i] = true;
}
int count=0;
helpNQueens(allList,list,nums,0,count);
return allList;
}
public void helpNQueens(List<List<String>> allList,List<Integer> list,boolean []nums,int index,int count){
if(list.size()>1){
if(Math.abs(list.get(list.size()-2)-index)<2)
return;
}
if(count==nums.length){
if(isValid(list)){
List<String> str = new ArrayList<>();
for(Integer ind:list){
StringBuilder build = new StringBuilder();
for(int j=0;j<nums.length;j++){
if(j!=ind){
build.append(".");
}else{
build.append("Q");
}
}
str.add(build.toString());
}
allList.add(str);
}
return;
}
for(int i=0;i<nums.length;i++){
if(nums[i])
{
nums[i] =false;
list.add(i);
helpNQueens(allList,list,nums,i,count+1);
nums[i] = true;
list.remove(list.size()-1);
}
}
}
public boolean isValid(List<Integer> list){
boolean result =true;
int cmp1;
for(int i=0;i<list.size();i++){
cmp1 = list.get(i);
for(int j=i+1;j<list.size();j++){
if(Math.abs(cmp1-list.get(j))==j-i){
result = false;
break;
}
}
}
return result;
}
public static void main(String []args){
}
}
第二题:
class Solution {
private int result =0;
public int totalNQueens(int n) {
List<List<Integer>> allArray = new ArrayList<>();
List<Integer> alist = new ArrayList<>();
boolean flag[] = new boolean[n];
for(int i=0;i<n;i++){
flag[i]=true;
}
helpNQueens(allArray,alist,flag,n,0);
return result;
}
public void helpNQueens(List<List<Integer>> allArray,List<Integer> alist,boolean flag[],int n,int count){
if(count==n){
if(isValid(alist)){
result++;
}
return;
}
for(int i=0;i<n;i++){
if(flag[i]){
alist.add(i);
flag[i] = false;
helpNQueens(allArray,alist,flag,n,count+1);
flag[i] = true;
alist.remove(alist.size()-1);
}
}
}
public boolean isValid(List<Integer> list){
boolean res = true;
int cmp;
for(int i=0;i<list.size();i++){
cmp = list.get(i);
for(int j=i+1;j<list.size();j++){
if(Math.abs(list.get(j)-cmp)==j-i){
res = false;
break;
}
}
}
return res;
}
}