首页 > 代码库 > 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实现)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。