把合适的位置用数组表示【row,col】,然后把路径存在了p中,所以p为二维数组,此篇只提供思路,有需要的同学可以尝试把二维数组转化为符合题目的字符串
var solveNQueens = function(n) {
let arr=[]
let p=[]
const dd=function(row,p){
if(row==n){
arr.push([...p])
return
}
//遍历当前行
for(let col=0;col<n;col++){
if(!ishf(row,col,p)){
continue
}
p.push([row,col])
dd(row+1,p) //搜索下一行
p.pop()
}
}
dd(0,p)
return arr
}
//判断是否合法
const ishf=function(row,col,p){
//遍历p中的节点
for(let [row1,col1] of p){
//不能同行
if(row==row1){
return false
}
//不能同列
if(col==col1){
return false
}
//不能在斜角
if(Math.abs(row-row1)==Math.abs(col-col1)){
return false
}
}
return true
}