- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言回溯算法
begin readln(n); count:=0; for i:=2 to trunc(sqrt(n)) do if n mod i=0 then begin k:=1; a[1]:=i; try(n div i); end; end. 1)构造因子表 procedure makebiao; var i,p:longint; begin k:=0; for i:=2 to trunc(sqrt(n)) do if n mod i =0 then begin inc(k); a[k]:=i; end; p:=2*k; if a[k]*a[k]=n then dec(p); for i:=K+1 to p do a[i]:=n div a[p-i+1]; {for i:=1 to p do write(a[i], ); writeln(p);} end; 注意:注意 n为完全平方数时:dec(p) N=12: 时 2 3 4 6 N=100时: 2 4 5 10 20 25 50 2)递归求解: procedure try(j,n1,h:longint); { j:待搜索的因子表起点序号,即从a[j]到a[k]中开始搜索因数表中的因数, n1:待分解的尾因子, H:目前从因子表中搜索到的因子数目 :初始状态:try(1,n,0)} var i:longint; begin if h0 then begin inc(t); for i:=1 to h do write(b[i],*);writeln(n1); end; for i:=j to k do if n1 div a[i]a[i] then exit else if n1 mod a[i]=0 then begin b[h+1]:=a[i]; try(i,n1 div a[i],h+1); end; end; var a,b:array[1..100000] of longint; n,t,k:longint; 主程序: begin readln(n); t:=0; makebiao; try(1,n,0); writeln(t); end. n个人从事n项工作,每人只能从事一项,求最佳安排使效益最高。 设有A,B,C,D,E五人从事J1,J2,J3,J4,J5五项工作,每人 只能从事一项,他们的效益如下: 当 A从事J5,B从事J3, C从事J4 , D从事J1 ,E从事J2时收益最大值:50 输入:n和矩阵 输出:最大效益和方案 输入: 5 13 11 10 4 713 10 10 8 55 9 7 7 415 12 10 11 510 11 8 8 4 输出: 50 1:52:33:44:15:2 11、工作安排 const maxn=5; var data:array[1..maxn,1..maxn] of integer; n,i,j,max: integer; f,g: array [1..maxn] of integer; {f:保存临时组合;g:保存最佳组合} p: array [1..maxn] of integer;{工作是否已分配} procedure init; begin assign(input,ex8.in); reset(input); readln(n); for i:=1 to n do for j:=1 to n do read(data[i,j]); close(input); end; procedure try(k,t: integer);{搜索第k个人应从事的工作,获利共为t,初始时:try(1,0)} var i: integer; begin if k=n+1
文档评论(0)