N皇后问题

问题描写叙述:
N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自己主动攻击)

1.因为每一个棋子不可能同行。因此能够理解为从棋盘每行拿个棋子出来
2.因为每列棋子也不同样,因此没有同一个数字能够在一个列
3.综合1,2。问题转化为给[0-7]做全排列,然后满足没有两个数字在同一个斜线
4.依据斜率公式 (x1-x2)/(y1-y2),因此依据这个条件排出同线的组合
5.余下的组合即为每行棋子的列位置,索引,就是行号

var MAX = 8;var Ann = function a(arr){if(arr.length == 1){return arr;}var rr = new Array();
for(var i = 0; i<arr.length;i++){//get a copy
var ar = new Array();
for(var j = 0; j < arr.length;j++){ar[j] = arr[j];}//assume i
var current = ar[i];
ar.splice(i,1);var childRet = a(ar);for(var k = 0 ;k < childRet.length;k++){
var str = (current + "," + childRet[k]);if(str.length != 2 * MAX-1 || !sameLine(str)){
rr.push(str);
}}}return rr;
}var initArr = new Array();
for(var i = 0;i < MAX; i++){initArr.push(i);}var ret = Ann(initArr);for(var i = 0;i < ret.length;i++){
outRet(ret[i]);
}var count = 0;function outRet(r) {
count = count + 1;
console.log("==============" + "," + count.toString());
var a = r.split(',');
for(var i = 0;i < MAX; i++){var aa = new Array();
for(var j = 0;j < MAX; j++){
aa.push(0);
}
aa[a[i]] = 1;
console.log(aa);}
}function sameLine(str){
var arr = str.split(',');
for(var i = 0;i < arr.length; i++){
for(var j = 0;j < arr.length; j++){
if(i!=j&&Math.abs(i-j) == Math.abs(arr[i]-arr[j])){return true;}
}}
return false;}

转载于:https://www.cnblogs.com/mengfanrong/p/5193900.html

8皇后问题--回溯法 (循环递归)相关推荐

  1. 关于回溯法的递归与非递归-----N皇后问题

    关于回溯法的递归与非递归-–N皇后问题 蓝桥杯 基础练习 2n皇后问题 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一 ...

  2. n皇后问题-回溯法求解

    n皇后问题-回溯法求解 1.算法描述 在n×n格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. n皇后是由八皇后问题演变而来的.该问题 ...

  3. 八皇后问题 回溯法hdu2553

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. 回溯法之递归回溯和迭代回溯

      回溯法有通用解题法之称,它可以系统的搜索一个问题的所有解或者任意解.它在问题的解空间树中,按深度优先策略从根节点出发搜索解空间树,算法搜索至解空间树的任意一个结点时,先判断该节点如(子树)是否包含 ...

  5. n皇后问题(回溯法)

    目录 1.问题描述 2.问题分析 3.完整源码 1.问题描述 八皇后问题是十九世纪著名的数学家高斯于1850年提出的.问题是:在8×8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同 ...

  6. 八皇后问题、N皇后问题回溯法详解

    /* * 回溯法解N皇后问题 * 使用一个一维数组表示皇后的位置 * 其中数组的下标表示皇后所在的行 * 数组元素的值表示皇后所在的列 * 这样设计的棋盘,所有皇后必定不在同一行 * * 假设前n-1 ...

  7. 回溯法求解背包问题java_背包问题回溯法的递归实现(java)

    0-1背包问题,在搜索过程中使用递归来完成. package com.test; class Pack { int n = 8; //物品个数 int W = 110; //背包总容量 int[] W ...

  8. n皇后问题回溯法-迭代实现

    def place(x, t):"""判断当前列t放置的皇后是否合法:param x: 当前解:param t: 只确定了前t+1个皇后的位置:return:" ...

  9. JAVA实现N皇后问题(回溯法)

    package com.leetCode; /*** Follow up for N-Queens problem. Now, instead outputting board configurati ...

最新文章

  1. Sass函数:Sass Maps的函数-map-has-key($map,$key)
  2. 1、在Linux虚拟机上安装 docker
  3. 「客户成功故事」OneAPM 助力网上办事大厅构建阳光、高效、安全的政务服务平台...
  4. SAP Spartacus select option默认选择的实现
  5. 02 JRE与JDK
  6. 链表之单链表约瑟夫问题(二)
  7. classcastexception异常_优雅的异常处理
  8. display函数怎么使用_使用网络构建复杂布局超实用的技巧,赶紧收藏吧
  9. Fibonacci数列(数列 取模)
  10. Anaconda配置多spyder多python环境
  11. mybatis中的#{}和${}区别,和使用场景
  12. [Ext JS6]路由(Routing)及使用
  13. Selenium菜鸟手册
  14. 为什么有一些PDF转换成Word后是乱码?
  15. 流畅的Python(Fluent Python)
  16. HTML jquery笔试题,2019Web前端面试题及答案汇总-Jquery篇
  17. 两角和与差的余弦公式的五种推导方法之对比
  18. 艺工交叉——达芬奇只会画画吗?
  19. 源码阅读的意义:技术功底、hold住全场、设计能力、职场竞争
  20. YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(下)

热门文章

  1. @Async异步功能
  2. 罗马仕php30重量,充电宝多少毫安最好?这3款罗马仕充电宝必须收藏
  3. tune kubernetes eviction parameter
  4. 纳德拉:微软正计划“终极移动设备”
  5. 架构师的职责都有哪些?
  6. 鼠标移至图片后抖动的JS代码
  7. ERP管理软件中的“七脉神剑”
  8. php 安全基础 第八章 共享主机 安全模式
  9. 2.5.1.1、解析配置
  10. Linux 0.11内核分析03:系统调用