ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:99.46KB ,
资源ID:22035393      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22035393.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序设计算法实验指导 回溯Word文档下载推荐.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序设计算法实验指导 回溯Word文档下载推荐.docx

1、j+) if( (abs(k-j) = abs(xj-xk) | (xj=xk) )/*xi表示皇后 i 放在棋盘的第 i 行的第xi列*/ return 0;/*能攻击到其他皇后,返回 0 */ return 1;/*不能攻击到其他皇后,返回 1 */ void Backtrack(int t,int n,int *x) /*递归回溯求解*/ int i;if(tn) sum+;/*输出一个方案*/ printf(方案%d:,sum);for(i=1;i=1;k-)if(ai=ak) g=0;break; / 两数相同,标记g=0 if(i=9 & g=1 & a1a4) m1=a2*10+

2、a3;m2=a5*10+a6;m3=a8*10+a9;if(a1*m2*m3+a4*m1*m3=a7*m1*m2) / 判断等式 s+;(-) ,s);%d/%ld+%d/,a1,m1,a4);%ld=%d/%ld ,m2,a7,m3);if(s%2=0) printf(if(i1) i-; / 往前回溯 if(ai=9 & i=1) break;else ai+; / 至第1个数为9结束 共以上%d个解。递归程序实现:/ 桥本分数式递归求解 int a10,s=0; int put(int k);put(1); / 调用递归函数put(1) 共有以上%d个解。/ 桥本分数式递归函数 int

3、put(int k) int i,j,u,m1,m2,m3;if(k=9) for(i=1;=9;i+) / 探索第k个数字取值i ak=i;for(u=0,j=1;=k-1;j+)if(ak=aj) u=1; / 出现重复数字,则置u=1 if(u=0) / 若第k个数字可为i if(k=9 &a4) / 若已个数字,则检查等式 m1=a2*10+a3;if(a1*m2*m3+a4*m1*m3=a7*m1*m2) s+; printf( : / 输出一个解 %d/%d+%d/%d,a1,m1,a4,m2);=%d/%d ,a7,m3);else put(k+1); / 若不到个数字,则调用

4、put(k+1) return s;3. 给定有n个不同的正数组成的集合W=Wi | Wi 0,i=1,2,n和给定正数M,求出M中所有使其和数等于M的子集。即给定一个n个整数的集合W=W1,W2.Wn和整数M,找出和等于M的W的子集。如:W=11,13,24,7 M=31 问题的解为:24,7和11,13,7解可以用布尔向量表示为:0,0,1,1,1,1,0,1又如:W=10,20,30,40,50,60和M=60,则有三种不同长度的解,它们分别是10,20,30,20,40,60.这个问题可以用另一种方法明确表达,使得解是一种明显的长度为n的布尔向量,于是上面的三个解可以用布尔向量表示为:

5、1,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1conio.h#define MAX 1000/global variablesint n=0;/the number of numbersint c=0;/the sum of the subsetint numMAX=0;int count=1;/the number of the element in a subset int resultMAX=0; /the answer of this questionint c_sum=0;/current sum/prototypesvoid swap(int &a,int

6、&b);void back_subset(int i);int main() /declaration int i=0;Please input the number of the numbers: scanf(Please input the sum:c); for(i=1;i+) scanf(numi); back_subset(1); getch();void back_subset(int i) if(c_sum+numi=c) resultcount=numi; for(int temp=1;tempn) if(c_sum+numic) return; for(int j=i; re

7、sultcount+=numj; c_sum+=numj; swap(numi,numj); back_subset(i+1); c_sum-=numj; count-;b) int temp=a; a=b; b=temp;iostreamusing namespace std;const int MAX=11;const int bMAX=1,2,3,4,5,8,11,23,45;int xMAX=0;int sum;int Sum();int SumOfSub(int ,int ,int );void Display(int *);int main() cout sum;int s=0,k

8、=0,r;r=Sum();/ cout r endl;SumOfSub(s,k,r);int Sum() int s=0;for(int i=0;i MAX; s+=bi;int SumOfSub(int s,int k,int r) if(r 0) return 0;xk=1;if(s+bk=sum) Display(x);if(s+bk+bk+1 =sum&s+bk+1 / xk=0;SumOfSub(s,k+1,r-bk);/ void Display(int *x) if(xi=1) cout bi =M为终止条件。具体的算法,我给个大概流程吧int lstN; /保存选取的数int

9、index = 0; /lst中最后的一个数的位置func(W, N) if(N = 0) /遍历完毕 返回 return; for(i=0 to N) if( Wi1 != -1 ) /判断是否已经读取当前值 lstindex+ = Wi0 /当前值加入到保存数组 Wi1 = -1; /设置当前值已经读取,不可再读 if(check() = 0) func(W, N-1); /大小不够M,继续往下读 else if(check() = 1) print(lst); /和为M,输出 lst-index = 0; /回溯,寻找下一组解 Wi1 = 0;check() if(sum(lst) W) return -1; if(sum(lst) return 0; return 1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1