5-5回溯-TSP计算机应用基础.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
旅行售货员问题 TSP : 某售货员到若干城市去推销商品,已知各城市之间的路 程(或旅费)。他要选定一条路线,经过每个城市一遍最后 回到驻地的路线,使得总的路程(或总旅费)最小。 设G=(V, E)是一个带权图。 图中各边的费用(权值)为正。图中一条周游路线是包括V 中所有顶点的回路。一条周游路线的费用是该路线上所 有边的费用之和。所谓旅行售货员问题就是要在图G中找 出一条最小费用的周游路线。 考虑TSP的递归回溯算法 Try(s){ 线路上的第s个结点 做挑选候选者的准备; 这里只需依次考察n–1个结 while (未成功且还有候选者){ 点,即for (i=2; i=n; i++)下 挑选下一个候选者next ; 一个候选就是i 结点i尚未在路线中 if (next可接受) { 若新线路更好,就用 且总耗费值不大。 就是将结点i放入路 记录next ; 新线路取代老线路。 线中并修改耗费值 if (满足成功条件) {成功并输出结果} else Try(s+1); 这里无所谓成功与否, s = = n if (不成功) 删去next的记录; }} 因为每一条周游路线 return 成功与否} 都要进行比较。 TSP的递归回溯算法 Try(s){ for (i = 2; i = n; i++) if (Accept(i)) { Record(s, i) ; if (s = = n) if (better) TakeNewPath( ) ; else Try(s+1); Move-off(s, i)} return } 求解TSP的数据结构 用数组C[n][n]存放n个城市间的费用值。 用数组P[n]记录已经找到的费用最小的周游 路线,C为其相应的费用,C初值为∞。 用数组N[n]记录目前正在寻找的周游路线, NC为其相应的费用; 如果NC+C[N[n]][1]小于C ,则路线N更佳, 于是P[] = N[] ,C = NC+C[N[n]][1]。 如果结点next不是N 中已有的结点,且C大于 NC+C[N[i]][next] ,则结点next是可接受的。 TSP的递归程序Try Try(s){ 数组T[]表示结点i尚未被选 for (i = 2; i = n; i++) if (Accept(i)) { (C NC+C[N[s]][i] T[i]) { Record(s, i) ; if (s = = n) if (better) TakeNewPath( ) ; (C NC+C[N[s]][1]) TakeNewPath( ); else Tr

文档评论(0)

恬淡虚无 + 关注
实名认证
内容提供者

学高为师,身正为范.师者,传道授业解惑也。做一个有理想,有道德,有思想,有文化,有信念的人。 学无止境:活到老,学到老!有缘学习更多关注桃报:奉献教育,点店铺。

1亿VIP精品文档

相关文档