8皇后问题--回溯法 (循环递归)
来源:互联网 发布:淘宝客服用什么软件 编辑:程序博客网 时间:2024/06/07 04:47
N皇后问题
问题描述:
N皇后问题是一个经典的问题,在一个N*N的棋盘上放置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 copyvar ar = new Array();for(var j = 0; j < arr.length;j++){ar[j] = arr[j];}//assume ivar 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;}
0 0
- 8皇后问题--回溯法 (循环递归)
- 回溯法解决八皇后问题(循环/递归)
- 递归-回溯法求解8皇后问题(C)
- 递归-回溯法求解8皇后问题
- n皇后问题递归算法(回溯法)
- java回溯法(递归)解八皇后问题
- 非递归求解N皇后问题(回溯法)
- 八皇后问题(排列+递归+剪枝=回溯法)
- 八皇后问题(递归+回溯法)
- N皇后问题(回溯递归)
- 八皇后问题(递归+回溯)
- 八皇后问题(递归+回溯)
- 八皇后问题(回溯 递归)
- 八皇后问题(递归,回溯)
- 八皇后问题(递归,回溯)
- 八皇后问题(递归回溯+迭代回溯)
- 回溯法解决2n皇后(8皇后)问题
- 递归回溯--八皇后问题
- CC++初学者编程教程(4) 安装Oracle12c于Windows Sever2012
- fckeditor视频教程
- 那些不易注意到的Unity实用小功能
- 2BizBoxERP通过WebStart方式(JNLP)启动客户端
- LINUX下一款不错的网站压力测试工具webbench
- 8皇后问题--回溯法 (循环递归)
- Sqlite数据类型
- 解决:<net.sf.ehcache.util.UpdateChecker> : New update(s) found: 2.6.5
- Google服务全线被封:附解决方案
- AbstractQueuedSynchronizer实现源码解析(一)
- mysql float double 类型
- ipsec.conf(5) - Linux man page
- 如何写music apk
- WinForm_DataGridView一列多个按钮