程序设计基础-张长海-ch12.pptVIP

  1. 1、本文档共82页,可阅读全部内容。
  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文档。上传文档
查看更多
第十二章 程序开发 自顶向下、逐步求精 结构化程序设计原则 程序风格 穷举和试探 本章小结 §12.1 验证三角形外心定理 ----自顶向下、逐步求精 例12.1 验证三角形外心定理:三角形三条边的垂直平分线交于一点,该点是三角形外接圆的圆心。 解:不失一般性,假设三角形的任意一条边都不平行于任意一个坐标轴。依据解析几何知识,该问题的验证步骤应该是: 读入三点a,b,c的坐标(x1,y1)、(x2,y2)、(x3,y3); 检验三点是否构成一个三角形; 若三点构成三角形,则验证外心定理 。 例12.2 三个齿轮啮合问题 设有三个齿轮互相衔接,求当三个齿轮的某两对齿互相衔接后到下一次这两对齿再互相衔接,每个齿轮最少各转多少圈。 解:这是求最小公倍数的问题。每个齿轮需转圈数是三个齿轮齿数的最小公倍数除以自己的齿数。设 三个齿轮的齿数分别为:na、nb、nc ; 啮合最小圈数分别为:ma、mb、mc ; 三齿轮齿数的最小公倍数为k3 。 欧几里德辗转相除法 u % v → R1 v % R1 → R2 R1 % R2 → R3 R2 % R3 → R4 … … … … Rn-2 % Rn-1 → Rn=0 Rn-1 % Rn → Rn 为正整数u 、v的最大公因数 §12.3.1 良好的行文格式 程序的行文格式不好直接影响程序的可读性、清晰性和外观。 §12.4 八皇后—穷举与试探 这是一个古老而有趣的游戏。高斯(C.F.Gauss)最早在1850年提出并研究过这个问题,但是没有完全解决。该问题是: 在一个8*8格的国际象棋棋盘上放置八个皇后,使任意两个皇后都不能互相攻击。 按国际象棋规则,两个皇后可以互相攻击。若 在同一行上, 或在同一列上, 或在同一条斜线上(包括左高右低、右高左低) 一、八皇后 穷举法 本方法思路是,按某种顺序枚举出全部排列或组合。每当枚举出一种排列或组合之后,便用给定条件判断该种排列或组合是否符合条件。 若符合条件,则本种排列或组合被选中,可以输出或记录下来。 若不符合条件,则把本种排列或组合舍掉。 八个皇后的排列问题,最简单的方法是八重循环,可以编出如下穷举法程序。 在下述算法中,用到检验函数check与输出函数out。为简单起见,先省略它们的具体实现细节。 二、八皇后 试探法 按照一定的规律,从一满足条件的初始状态出发,逐步生成满足条件的子排列, 不断增加子排列长度。 增加子排列长度过程中,每增加一位, 生成一个子排列后, 便检验它是否满足条件。 不满足条件, 则换一个子排列-即修改当前位置 满足条件, 则延长子排列, 增加子排列长度。 子排列的长度满足要求长度,便找到了一个解。 若要求找一个解即可,这时便可以结束。 若要求找所有解,这时可以输出或记录本解,然后按前述思路,继续修改排列,继续试探,找下个解 在上述试探过程中, 修改当前位置时: 若当前位置上还有没被试探过的元素,则应该取下一个没被试探过的元素进行试探 若当前位置上所有元素都被试探过了,则在当前位置上没办法再修改了 这说明前边的某个位置有问题,放置的元素不对,显然应该向回退一位。 回溯后, 原来的上 一个位置变成了当前位置, 则又变成修改当前位置的问题了。 这时, 同样还应该考虑取下一个没被试探过的元素进行试探, 以及是否所有元素在当前位置上都被试探过了并回溯的问题。 若B[i]使A[1],A[2], ... ,A[m]满足r, 则进入A的下一个位置。 m=m+1 若B[i]不能使A[1],A[2], ... ,A[m]满足r, 则有两种情况: ik , 若B[i]不能使A[1],A[2], ... ,A[m]满足r, 则有两种情况: ik ,取B中下一个符号继续试探 i=i+1 若i=k 说明在当前位置上所有符号都已经被试探过 若i=k 说明在当前位置上所有符号都已经被试探过 应该回溯到上一个位置, 作 m=m-1 后继续试探 直到找到解、m=0结束 三、八皇后 穷举法的递归实现 用穷举法实现八皇后问题, 可以抽象的描述为:在数组A的8个位置上分别排列一个1到8的整数。设想, 如果有一个函数 queen(r) 能够完成 “在数组A后部的r个位置(从第8-r+1到8)上, 分别排列一个1到8的整数”。 则八皇后问题便是 queen(8) “在数组A后部的r个

文档评论(0)

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

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档