- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十三讲穷举算法
6.1 穷举策略的概念 所谓枚举法,指的是从可能的解的集合中一一枚举各元素, 用题目给定的检验条件判定哪些是无用的,哪些是有用的。能使命题成立,即为其解。 有些问题可以用循环语句和条件语句直接求解,有些问题用循环求解时循环次数太多,无法编写程序,怎么办?下面是用“千军万马过独木桥,适者存”的方式实现穷举策略的。 6.2 典型例题与习题 例1.将2n个0和2n个1,排成一圈。从任一个位置开始,每次按逆时针的方向以长度为n+1的单位进行数二进制数。要求给出一种排法,用上面的方法产生出来的2n+1个二进制数都不相同。例如,当n=2时,即22个0和22个1排成如下一圈: 比如,从A位置开始,逆时针方向取三个数000,然后再从B位置上开始取三个数001,接着从C开始取三个数010,...可以得到000,001,010,101,011,111,110,100共8个二进制数且都不相同。 * * 第十三讲 穷举算法 主讲人:张志刚 VAR A :ARRAY[1..36] OF 0..1 B :ARRAY[0..31] OF INTEGER; I,J,K,S,P:INTEGER; BEGIN FOR I:=1 TO 36 DO A[I]:=0; FOR I:=28 TO 32 DO A[I]:=1; P:=1; A[6]:=1; WHILE (P=1) DO BEGIN J:=27 WHILE A[J]=1 DO J:=J-1; ( A[J]:=1 ) FOR I:=J+1 TO 27 DO ( A[i]:=0 ) FOR I:=0 TO 31 DO B[I]:=0; FOR I:=1 TO 32 DO BEGIN ( S:=0) FOR K:=I TO I+4 DO S:=S*2+A[k]; ( B[S]:=1 ) END; S:=0; FOR I:=0 TO 31 DO S:=S+B[I]; IF ( S=32 ) THEN P:=0 END; FOR I:=1 TO 32 DO FOR J:=I TO I+4 DO WRITE(A[J]); WRITELN END. 例2:在A、B两个城市之间设有N个路站(如下图中的S1,且N100),城市与路站之间、路站和路站之间各有若干条路段(各路段数=20,且每条路段上的距离均为一个整数)。??? A,B的一条通路是指:从A出发,可经过任一路段到达S1,再从S1出发经过任一路段,…最后到达B。通路上路段距离之和称为通路距离(最大距离=1000)。当所有的路段距离给出之后,求出所有不同距离的通路个数(相同距离仅记一次)。??? 例如:下图所示是当N=1时的情况: 从A到B的通路条数为6,但因其中通路5+5=4+6,所以满足条件的不同距离的通路条数为5。 算法说明:本题采用穷举算法。数据结构:N:记录A,B间路站的个数????????? 数组D[I,0]记录第I-1个到第I路站间路段的个数????????????? D[I,1],D[I,2],…记录每个路段距离????????? 数组G记录可取到的距离 VAR I,J,N,S:INTEGER;? B:ARRAY[0..100] OF INTEGER;? D:ARRAY[0..100,0..20] OF INTEGER;? G:ARRAY[0..1000] OF 0..1;BEGIN? READLN(N);? FOR I:=1 TO N+1 DO??? BEGIN????? READLN(D[I,0]);????? FOR J:=1 TO D[I,0] DO READ(D[I,J]);??? END;? D[0,0]:=1;? FOR I:=1 TO N+1 DO B[I]:=1;? B[0]:=0;? FOR I:=1 TO 1000 DO G[I]:=0;? WHILE??????? B[0]1?????? DO??? BEGIN????? S:=0;????? FOR I:=1 TO N+1 DO??????? S:=?????? S+D[I,B[I]];???????????? G[S]:=1;J:=N+1;????? WHILE????????? B[J]=D[J,0]??????? DO J:=J-1;????? B[J]:=B[J]+1;????? F
文档评论(0)