- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 搜索与回溯算法 【课堂练习】 【上机练习】 2、找出n个自然数(1,2,3,…,n)中r个数的组合。例如,当n=5,r=3时,所有组合为: 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 total=10 //组合的总数 【分析】:设在b[1],b[2],…,b[i-1]中已固定地取了某一组值且b[i-1]=k的前提下,过程Search(i,k)能够列出所有可能的组合。由于此时b[i]只能取k+1至n-r+i,对j=k+1,k+2,…,n-r+i,使b[i]:=j,再调用过程Search(i+1,j),形成递归调用。直至i的值大于r时,就可以在b中构成一种组合并输出。 3、输出字母a、b、c、d,4个元素全排列的每一种排列。 4、显示从前m个大写英文字母中取n个不同字母的所有种排列。 5、有A、B、C、D、E五本书,要分给张、王、刘、赵、钱五位同学,每人只能选一本,事先让每人把自已喜爱的书填于下表,编程找出让每人都满意的所有方案。 【答案】四种方案 张 王 刘 赵 钱 ① C A B D E ② D A C B E ③ D B C A E ④ D E C A B 6、有红球4个,白球3个,黄球3个,将它们排成一排共有多少种排法? 【分析】:可以用回溯法来生成所有的排法。用数组b[1..3]表示尚未排列的这3种颜色球的个数。设共有I-1个球已参加排列,用子程序Search(i)生成由第I个位置开始的以后n-I+1位置上的各种排列。对于第I个位置,我们对3种颜色的球逐一试探,看每种颜色是否还有未加入排序的球。若有,则选取一个放在第I个位置上,且将这种球所剩的个数减1,然后调用Search(I+1),直至形成一种排列后出。对第I个位置上的所有颜色全部试探完后,则回溯至前一位置。 1、全排列问题(Form.pas) 【问题描述】 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 【输入格式】 n(1≤n≤9) 【输出格式】 由1~n组成的所有不重复的数字序列,每行一个序列。 【输入样例】Form.in 3 【输出样例】Form.out 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 * * 搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。回溯是搜索算法中的一种控制策略。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。 如迷宫问题:进入迷宫后,先随意选择一个前进方向,一步步向前试探前进,如果碰到死胡同,说明前进方向已无路可走,这时,首先看其它方向是否还有路可走,如果有路可走,则沿该方向再向前试探;如果已无路可走,则返回一步,再看其它方向是否还有路可走;如果有路可走,则沿该方向再向前试探。按此原则不断搜索回溯再搜索,直到找到新的出路或从原路返回入口处无解为止。 递归回溯法算法框架[一] procedure Search(k:integer); begin for i:=1 to 算符种数 Do if 满足条件 then begin 保存结果 if 到目的地 then 输出解 else Search(k+1); 恢复:保存结果之前的状态{回溯一步} end; end; 递归回溯法算法框架[二] procedure Search(k:integer); begin if 到目的地 then 输出解 else for i:=1 to 算符种数 Do if 满足条件 then begin 保存结果 Search(k+1,参数表); end; end; 【例1】奇数环:从1到6这6个数摆成一个环,要求相邻的两个数的和是一个奇数。 【算法分析】 非常明显,这是一道回溯的题目。从1开始,每个空位有6种可能,只要填进去的数合法:与前面的数不相同;
文档评论(0)