回溯法在计算机程序设计中应用.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  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文档。上传文档
查看更多
回溯法在计算机程序设计中应用

回溯法在计算机程序设计中应用   摘要:回溯法是计算机程序设计中经常使用的一种算法。为了在更好的理解和应用回溯法,从人们熟知的穷举法入手,层层展开,逐步过渡到回溯法,并分析回溯法中扩展、回溯、调整三个关键步骤,理解回溯法的运行过程,建立回溯法算法,从而使用回溯法解决程序设计中的实际问题。   关键词:回溯法;穷举法;算法模型   中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)31-0262-03   Application of Backtracking Method in Computer Programming   PEI Nan-ping, BI Chuan-lin   (Jiujiang Vocational and Technical College, Jiujiang 332007, China)   Abstract: Backtracking is one of the most frequently used programming algorithms in computer programming. In order to better understand and use backtracking in the program design. We start with the exhaustive method and gradually use backtracking to implement it, We analyzed three key steps of extension, backtracking and adjustment, establish backtracking algorithm model and use backtracking in program design.   Key words: backtracking method; exhaustive method; algorithm model   回溯法,又称试探法,是计算机程序设计中经常使用的一种算法,在实际中,有着广泛的应用。但是对于初学者又是一个比较难于理解的高级算法,如何在计算机程序设计中得心应手的使用回溯法呢?我们从大家很容易理解的穷举法展开,逐步过渡到回溯法的实现,详细分析回溯法中中扩展、回溯、调整等三个关键步骤,帮助程序员设计人员理解回溯法的运行过程,建立回溯法算法模型,并在实际程序设计使用此方法。   1 回溯法模型   回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。   用回溯法求解问题规模有n层的所有解,其中m(0=m=n-1)是当前求解问题的层数。算法模型如下:   m=0; /* 当前从第0层开始 */   设置第0层的初始数据;   while(1)   if(第m层数据没有越界 当前规模m符合解的所有条件)   if(m==n-1) /* 已达到问题要求解的规模 */   {   输出一个解;   调整第m层到下一个数据;   }   else { /* 当前还没有达到问题要求解的规模 */   m++; /*扩展到下一层 */   设置第m层初始数据;   }   else if(第m层数据越界)   {   if(m==0) /* 穷举完毕,跳出循环结束程序 */   break;   m―; /* 回溯到上一层 */   调整第m层到下一个数据;   }   else 调整第m层到下一个数据; /* 当前数据没有越界 */   该算法模型对于有经验的程序员是不难理解的,但对于初学者就有点茫然了,其动态运行过程更难想象。下面用一个简单的示例,先用容易理解的穷举法解决,逐步递推,过渡到回溯法的思路。   2 程序举例   问题:   ??1至k的自然数字中取n个数字,组合成一个新的数值,输出所有的组合数值。例如:k=5,n=3也就是从1至5中5个数字取3个数字,其所有的组合数如下:   123 124 125 132 134 135 142 …… 512 513 514 521 523 524 531 532 534 541 542 543。共60个解。   为了描述方便,下面所有程序设定k=8,n=5。当然可以修改程序中的常量为任意值。首先使用穷举法来解决这个问题。   3 最简单的穷举法程序   k=8,n=5。从1至8中取5个数字,输出所有的组合数值。程序如下:   #include   #define K 8   #define N

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档