java原文参考这位大神,他的博客中有关于N皇后问题的极限算法
https://www.cnblogs.com/newflydd/p/5091646.html
我只是搬运翻译的js实现 console.log使用node.js到时候替换即可。
//定义数组克隆方法
Array.prototype.clone = function(){
var a=[];
for(var i=0;i<this.length;i++) {
a.push(this[i]);
}
return a;
}
//皇后数
const N=8;
//计数器
var count=0;
//棋盘
var chess=new Array();
//计时器开始
var begin=new Date().getTime();
//初始化棋盘
for(var i=0;i<N;i++){
chess[i]=new Array();
for(var j=0;j<N;j++){
chess[i][j]=0;
}
}
putQueenByRow(chess,0);
var end =new Date().getTime();
//打印时间差
var interval= end- begin;
console.log("final time:"+interval+"ms");
function putQueenByRow(chess,row){
if(row==N){
count++;
var str="No."+count+" solution";
console.log(str);
console.log(chess);
return;
}
var chessTemp=chess.clone();
for(var i=0;i<N;i++){
//清空当前行的皇后
for(var j=0;j<N;j++){
chessTemp[row][j]=0;
}
//放置皇后
chessTemp[row][i]=1;
//判断是否可行
if(isSafety(chessTemp,row,i)){
putQueenByRow(chessTemp,row+1);
}
}
}
function isSafety(chess,row,col){
var step=1;
while(row-step>=0){
//判断是否是前一排的中上
if(chess[row-step][col]==1){
return false;
}
//左上
if(col-step>=0 && chess[row-step][col-step]==1){
return false;
}
//右上
if(col+step<N && chess[row-step][col+step]==1){
return false;
}
step++;
}
return true;
}