8皇后以及N皇后算法探究,回溯算法的JAVASCRIPT实现,递归方案

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值