首页 > 代码库 > 4皇后或者8皇后求解算法--------(N皇后求解算法,JS实现)

4皇后或者8皇后求解算法--------(N皇后求解算法,JS实现)

1 var check = new CheckBoard(8);//初始化棋盘,为8皇后2 check.getResult(0);           //参数表示从第0步开始走3 console.log(check.result.length);//所有符合条件的路径均保存在数组result中  //结果: 92 中解法  (---即8皇后问题有92种解法)
 1 //n皇后问题 源代码 ----(JavaScript语言) 2 //定义每个节点的位置 3 var Node = function (i, j) { 4   this.i = i; 5   this.j = j; 6 } 7 //根据n生生成棋盘 8  9 var CheckBoard = function (n) {10   this.check = [11   ];12   for (var i = 0; i < n; i++) {13     var temp = [14     ];15     for (var j = 0; j < n; j++) {16       var node = new Node(i, j);17       temp.push(node);18     }19     this.check.push(temp);20   }21   this.n = n;22   this.nodes = [23   ];24   this.result = [25   ];26 }27 //检查路径上是够能够存在该点28 29 CheckBoard.prototype.passable = function () {30   var array = this.nodes;31   //若数组中,存在同行,同列, 或通对角线的节点则返回false32   var object1 = {33   },34   object2 = {35   }; //分别管理者行和列36   for (var k = 0, length = array.length; k < length; k++) {37 var i=array[k].i,j=array[k].j;38     if ((!object1[i]) && (!object2[j])) {39       object1[i] = true;40       object2[j] = true;41     } else {42       return false;43     }44   }45   //for  若到这一步,则证明不在同一行,也不在同一列46   //判断是否在同一个对角线上47   //判断是否在对角线上的原则,即为是否满足与所有点的组成的直线斜率绝对值是否为148 49   if (array.length > 1) {50     var top = array[array.length - 1];51     for (var i = 0, length = array.length - 1; i < length; i++) {52       var k = (top.j - array[i].j) / (top.i - array[i].i); //求得斜率53       if (Math.abs(k) === 1) {54         return false;55       }56     }57   }58   return true;59 }60 CheckBoard.prototype.getResult = function (i) {61   //i代表正在走的某一步62   if (i == this.n) { //当正在走第N步的时候,代表棋盘已经遍历一遍63     var array = [64     ];65     for (var i = 0, length = this.nodes.length; i < length; i++) {66       var index1 = this.nodes[i].i;67       var index2 = this.nodes[i].j;68       array.push(new Node(index1, index2));69     }70     this.result.push(array);71   } else {72     for (var j = 0; j < this.n; j++) {73       //将当前位置推入栈74       this.nodes.push(this.check[i][j]);75       if (this.passable()) arguments.callee(i + 1);76       this.nodes.pop();77     }78   }79 }

 

4皇后或者8皇后求解算法--------(N皇后求解算法,JS实现)