javascript解八皇后问题的方法总结_javascript技巧

javascript解八皇后问题的方法总结_javascript技巧

ID:30777230

大小:558.56 KB

页数:11页

时间:2019-01-03

javascript解八皇后问题的方法总结_javascript技巧_第1页
javascript解八皇后问题的方法总结_javascript技巧_第2页
javascript解八皇后问题的方法总结_javascript技巧_第3页
javascript解八皇后问题的方法总结_javascript技巧_第4页
javascript解八皇后问题的方法总结_javascript技巧_第5页
资源描述:

《javascript解八皇后问题的方法总结_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JavaScript解八皇后问题的方法总结关于八皇后问题的JavaScript解法,总觉得是需要学习一下算法的,哪天要用到的时候发现真不会就尴尬了背景八皇后问题是一个以国际象棋为背景的问题:如何能够在8X8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皐后都不能处于同一条横行、纵行或斜线上八皇后问题可以推广为更一般的n皇后摆放问题:这吋棋盘的大小变为nXn,而皇后个数也变成no当且仅当n二1或n$4时问题有解盲目的枚举算法通过N重循环,枚举满足约束条件的解(八重循环代码好多,这里进行四重循环),找到四个皇后的所有可能位置,然

2、后再整个棋盘里判断这四个皇后是否会直接吃掉彼此,程序思想比较简单functioncheckl(arr,n){for(vari=0;i

3、

4、Math,abs(arr[i]-arr[j])二二j-i){returnfalse;}returntrue;}functionquccnl(){vararr=[];for(arr[0]二1;arr[0]〈二4;arr[0]++){for(arr[1]二1;arr[1]〈二4;arr[1]++){for(arr[2]=1;arr[2]<=4;a

5、rr[2]++){for(arr[3]=1;arr[3]<=4;arr[3]++){if(!checkl(arr,4)){continue;}else{console,log(arr);}}queenl();//[2,4,1,3]//[3,1,4,2]关于结果,在4*4的棋盘里,四个皇后都不可能是在一排,arr[O]到arr[3]分别对应四个皇后,数组的下标与下标对应的值即皇后在棋盘中的位置回溯法『走不通,就回头』,在适当节点判断是否符合,不符合就不再进行这条支路上的探索functioncheck2(arr,n){for(vari二0;i<=n-1;i++){(arr[i

6、]==arr[n])){if((Math・3bs(3rr[i]-arr[n])二二n-i)returnfalse;}}returntrue;functionqueen2(){vararr二[];for(arr[0]=1;arr[0]<=4;arr[0]++){for(arr[l]=1;arr[1]<=4;arr[1]++){if(!check2(arr,1))continue;//摆两个皇后产生冲突的情况for(arr[2]=1;arr[2]<=4;arr[2]++){if(!check2(arr,2))continue;//摆三个皇后产生冲突的情况for(arr[3]=

7、1;arr[3]<=4;arr[3]++){if(!check2(arr,3)){continue;}else{console,log(arr);queen2();//[2,4,1,3]//[3,1,4,2]非递归冋溯法算法框架:wh订e(k>0『有路可走』and『未达到目标』){//k>0有路可走if(k>n){//搜索到叶子节点//搜索到一个解,输出}else{//a[k]第一个可能的值while(『a[k]在不满足约束条件且在搜索空间内』){//a[k]下一个可能的值}if(Fa[k]在搜索空间内』){//标示占•用的资源//k二k+1;}else{//清理所占的状

8、态空间//k二k一1;}具体代码如下,最外层while下面包含两部分,一部分是对当前皇后可能值的遍历,另一部分是决定是进入卜•一层还是回溯上一层functionbackdate(n){vararr二[];vark=1;//第n的皇后arr[0]=1;while(k>0){arr[k~l]=arr[k~l]+1;while((arr[k-l]<=n)&&(!check2(arr,kT))){arr[k~l]二arr[k~l]+1;}//这个皇后满足了约束条件,进行下一步判断if(arr[k-l]<=n){if(k==n){//笫n个皇后console.log(art);}e

9、lse{k二k+1;//下一个皇后arr[k~l]=0;}}else{k二k-1;//回溯,上一个皇后}backdate(4);//[2,4,1,3]//[3,1,4,2]递归回溯法递归调用人人减少了代码量,也增加了程序的可读性vararr=[],n=4;functionbacktrack(k){if(k>n){console.log(arr);}else{for(vari=1;i<=n;i++){arr[k~l]=i;if(check2(arr,kT)){backtrack(k+1);}}}}backtrack(1);//[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。