试验二n后问题的回溯算法试验目的掌握n后问题的回溯递归.DOCVIP

试验二n后问题的回溯算法试验目的掌握n后问题的回溯递归.DOC

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
试验二n后问题的回溯算法试验目的掌握n后问题的回溯递归

实验二 n后问题的回溯算法 一、实验目的: 掌握n后问题的回溯递归算法。 理解并掌握分析回溯算法效率的方法。 使用Estimate算法就8皇后问题给出效率估算。 二、模型建立: 问题: (1) 编写求n后问题的通用函数; (2) 取n=8计算出n后问题的所有可行解,并以8元组的形式输出;(对可行解的结构进行分析) 要求: (1) 随机输出2个可行解的图形。其中棋盘要有8×8的格子,Queen图像自选; (2) 使用Estimate算法随机取n=5-10条随机路径估算回溯法的效率并加以分析; 求解思路: (1)、对第一问求解。 n后问题要求在一个n*n格的棋盘上放置n个皇后,使得他们彼此不受攻击。即要求任何两个皇后不能放在同一行或同一列或同一斜线上。 对此,我们用一个n元组表示其解。x[i]表示皇后i放在棋盘的第i行的第x[i]列。根据要求,可以得出两个约束条件:(i) 任何两个皇后不能在同一列,即:对任意i≠j,x[i]≠x[j]。(ii) 任何两个皇后不可以在同一斜线上,即对任意i≠j,有| i-j |≠| x[j]-x[i] |。 用回溯法解n后问题时,可以用一棵完全n叉树来表示其解空间。可以用可行性约束函数Place (即上述两个约束条件)剪去不满足行、列和斜线约束的子树。 (2)、对第二问的求解。 利用第一问,可以求得n=8的所有可行解。在本程序中直接输出。由于可行解的结构具有旋转性和对称性。故,8后问题共计92组解可有几组基本解通过旋转或对称得到。 三、模型求解 1、开发环境 开发工具: Microsoft Visual Studio 6.0 Windows 2003下编译运行 2、程序设计说明 本次实验为“N皇后问题”,用纯C语言编写,用于解决N皇后问题,所有解以n元组的形式在屏幕输出。根据要求,本程序中定义n为8,得到一共92组解。 3、源代码 #include stdio.h #define MAXN 20 int n,m,good; int col[MAXN+1],a[MAXN+1],b[2*MAXN+1],c[2*MAXN+1]; int main() { int j; char awn; printf(Enter n: ); scanf(%d,n); for(j=0; j=n; j++) a[j]=1; for(j=0; j=2*n; j++) b[j]=c[j]=1; m=1; col[1]=1; good=1; col[0]=1; do{ if(good) if(m==n) { // 找到一个解 printf(列\t行\n); for(j=1; j=n; j++) printf(%3d\t%d\n,j,col[j]); printf(Enter a character (Q/q for exit)!\n ); scanf(%c,awn); if(awn==Q||awn==q) return 0;//exit(0);// while(col[m]==n) { m--; a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1; } col[m]++; } else { a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=0; col[++m]=1; } else { while(col[m]==n) { m--; a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1; } col[m]++; } good = a[col[m]]b[m+col[m]]c[n+m-col[m]]; }while(m!=0); }4、程序使用说明 本程序具体解决n皇后问题。其值已在程序开头用define定义MAXN为20。故皇后总数不能大于20。可以从屏幕直接查看解。解的模式按皇后的所在的队列给出。观察下一组解,可按“ENTER”按钮。 5、模型的解 /*-------------八皇后问题-8元组形式(此处用“|”表示实际在屏幕显示时是换行) -------------*/ 这是8皇后问题的所有解 1 5 8 6 3 7 2 4 | 1 6 8 3 7 4 2 5 | 1 7 4 6 8 2 5 3 | 1 7 5 8 2 4 6 3 | 2 4 6 8 3 1 7 5 2 5 7 1 3 8 6 4 | 2 5 7 4 1 8 6 3 | 2 6 1 7 4 8 3 5 |

文档评论(0)

2105194781 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档