网站大量收购独家精品文档,联系QQ:2885784924

旅行售货员问题.pdfVIP

  1. 1、本文档共3页,可阅读全部内容。
  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文档。上传文档
查看更多

旅⾏售货员问题

旅⾏售货员问题

【题⽬】

某售货员要到4个城市去推销商品,已知各城市之间的路程,右图所⽰。

请问他应该何选定⼀条从城市1出发,经过每个城市⼀遍,最后回到城市1的路线,使得总的周游路程最⼩?并分析所设计

算法的计算时间复杂度。

【分析】

该题利⽤回溯法求解,此时需要确定解空间的类型:我们可以知道该解空间为⼀棵排列树。我们假设初始的⼀条路线

为x,x中的值为1,2,3,……,n,表⽰该路线为由城市1依次经过城市2、3……到n后再回到城市1(当然是假设该路线存

在)。果不存在的话,我们只需改变⼀下这个排列的排列⽅式,再进⾏判断,所以可想⽽知,我们可以知道该解空间是⼀

棵排列树。

当然上述的说法,只是单纯的穷举,这并不是我们想要的回溯法,我们通过递归实现,在递归的过程中适当地“剪

枝”即除去那些不可能形成最优解的解。现在我们来确定⼀下可⾏的约束条件,当我们进⾏递归有哪些信誉好的足球投注网站,有哪些信誉好的足球投注网站到第t层时,我们

需要判断⼀下x[t]所代表的城市是否与上⼀层x[t-1]所代表的城市有“路”,果没有的话,需要改变x[t]的值,然后继续上述判

断,当出现⼀个满⾜条件的x[t]后还要判断当前从1到t-1所⾛的路程cc加上x[t]与x[t-1]的距离是否⼩于当前已经记录的最优解

(最优解的初始值是⼀个⾜够⼤的数),果到t的距离⽐当前最优解还要⼤的话,那么再以这条路线有哪些信誉好的足球投注网站下去的话回到城

市1的路程⼀定⽐当前最优解还⼤,所以我们没有必要对这条路线进⾏下⼀步的有哪些信誉好的足球投注网站。最后我们来确定当有哪些信誉好的足球投注网站到叶⼦结点的

时候我们该何处理?已知有哪些信誉好的足球投注网站到t层时,若t=n,说明已经有哪些信誉好的足球投注网站到了叶⼦结点,这个时候我们还需做上述所说的两个判断,

果两个判断都通过的话,说明该解⽐当前最优解还优,那么我们需要将该解记录下来,并记录该解的最优值。

【伪代码】

voidtravel(intt){

if(t到达第n层即有哪些信誉好的足球投注网站到叶⼦结点){

if(城市x[t-1]可以到达城市x[t],并且城市x[t]可以回到城市1,且此时所⾛的路程cc加上

x[t-1]与x[t]的距离和x[t]与1的距离⼩于当前最优值bestc){

将最优解记录下来;

将最优值记录下来;

}

return;

}

for(inti=t;in;i++){

if(城市x[t-1]能达到城市x[i]即这两个城市间有边,并当前所⾛的路程cc加上这两个城市的距离

没有⽐当前最优值bestc⼤){

swap(x[i],x[t]);

修改此时所⾛的路程cc;

进⼊下⼀层递归;

恢复原来cc的值;

swap(x[i],x[t]);

}

}

}

【程序】

⽤C++语⾔编写程序,代码下:

#includeiostrea

usingnaespacestd;

constintINF=

intn,cc=0,bestc=INF;

int**g;

int*x,*bestx;

voidtravel(intt){

if(t==n){

if(g[x[t-1]][x[t]]!=INFg[x[t]][1]!=INF

(cc+g[x[t-1]][x[t]]+g[x[t]][1]bestc||bestc==INF)){

for(inti=0;in+1;i++)

bestx[i]=x[i];

bestc=

文档评论(0)

130****6553 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档