JS算法之8皇后

JS算法之8皇后算法

​ 8皇后算法算是回溯算法中很典型的案例,算法要求是在一个8x8的棋盘上,同一行同一列,并且斜线上不能同时有皇后,问在这个棋盘上放8个皇后有多少种方法?

01234567
0
1
2
3
4
5
6
7

假设第一个皇后在第一个位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ur3VznGS-1649858930928)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220413214959433.png)]

那么,此时的行和列以及斜线都不能再有皇后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVMiAr83-1649858930929)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220413215157817.png)]

那么我们就得从第二行开始找第二个皇后,然后用同样的判断规则来找下一个皇后,直到8个皇后全部找到

对于第一行而言,我们的第一个皇后可以在不同的位置,相对于的,每一个皇后的位置都有一个或多个选择,这时候我们就需要遍历整个棋盘来找出所有的皇后,遇见不符合规则的位置时需要返回到上一步重新选择皇后的位置,

我们需要枚举所有的搜索路径,当发现不满足求解条件时吗,就回溯到上一步,所以说8皇后算法也是回溯算法很典型的一个案例

js实现8皇后

function eightqueen(){
    var arr=[];
    var n=8;//8x8
    function queen(row){//行
        if(row>n){//判断皇后数
            var result=arr.map(item=>item.y)
            console.log(result);
            // console.log(arr)
        }

        for(var i=1;i<=n;i++){//列
            if(row===1||count(row,i)){//第一次循环进来时,第一个皇后的位置就是1,1
                arr[row-1]={x:row,y:i}//满足条件的皇后坐标保存
                queen(row+1)
            }
        }

    }
    function count(lx,ly){
        for(var a=1;a<lx;a++){
            if(ly==arr[a-1].y||Math.abs(lx-arr[a-1].x)==Math.abs(ly-arr[a-1].y))//判断条件
                return false;
        }
        return true;
    }
    queen(1)//
}
eightqueen()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值