回溯算法的应用.docVIP

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

实验五 回溯算法的应用 一、实验目的 1.掌握回溯算法的基本概念 2.熟练掌握回溯算法解决问题的基本步骤。 3.学会利用回溯算法解决实际问题。 二、实验内容 1.问题描述: 题目一:N皇后问题 要在n*n的国际象棋棋盘中放n个皇后,使任意两个皇后都不能互相吃掉。规则:皇后能吃掉同一行、同一列、同一对角线的任意棋子。求所有的解 要求:键盘输入皇后的个数n (n ≤ 13) 输出有多少种放置方法 输入输出实例: 题目二:素数环问题 编写一简单程序实现素数环问题: 把从1到20这20个数摆成一个环,要求相邻两个数的和是一个素数。 要求:键盘输出结果 三.算法设计 包含:数据结构与核心算法的设计描述、函数调用及主函数设计、主要算法流程图等 程序调试及运行结果分析 N皇后问题 素数环问题 五.实验总结 附录: N皇后问题 #includeiostream #includemath.h using namespace std; int a[14],n; backdate(int n); check(int k); void output(int n); int main() { cout请输入皇后的个数:\n; int n; cinn; cout解的情况:\n; backdate(n); return 0; } backdate(int n) { int k; long num=0; a[1]=0; k=1; while(k0) { a[k]=a[k]+1; while((a[k]=n) (check(k)==0)) { a[k]=a[k]+1; } if(a[k]=n) { if(k==n) { num++; output(n); } else { k++; a[k]=0; } } else k--; } coutnumendl; return 0; } check(int k) { int i; for(i=1;i=k-1;i++) if(abs(a[i]-a[k])==abs(i-k) || (a[i]==a[k])) return(0); return(1); } void output(int n) { int i; cout[; for(i=1;i=n;i++) couta[i],; couta[n]]endl; } 素数环问题 #includeiostream #includemath.h try1(int i); check1(int j,int i); check2(int x); check3(int j,int i); void output(); using namespace std; int a[20],n; void main() { int k; cout请输入数值的个数:endl; cinn; for(k=1;k=n;k++) a[k]=0; a[1]=1; try1(2); } try1(int i) { int k; for(k=2;k=n;k++) { if(check1(k,i)==1 check3(k,i)==1) { a[i]=k; if(i==n) output(); else { try1(i+1); a[i]=0; } } } return 0; } check1(int j,int i) { int k; for(k=1;k=i-1;k++) if(a[k]==j) return(0); return(1); } check2(int x) { int k,n; n=sqrt(x); for(k=2;k=n;k++) if(x%k==0) return(0); return(1); } check3(int j,int i) { if(in) return(check2(j+a[i-1])); else return(check2(j+a[i-1]) check2(j+a[1])); } void output() { int k; for(k=1;k=n;k++) couta[k]; coutendl; }

文档评论(0)

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

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

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档