回溯法求旅行售货员问题_物联1301班_刘悦_201308080112答辩.docx

回溯法求旅行售货员问题_物联1301班_刘悦_201308080112答辩.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析与设计实验报告 第 X 次实验 姓名刘悦学号201308080112班级物联1301班时间12.26上午地点工训楼C栋309 实验名称 回溯法求旅行售货员问题实验目的通过上机实验,掌握回溯算法的思想,利用回溯法求旅行售货员问题并实现。实验原理旅行售货员问题的解空间树是一棵排列树。 当i=n时,当前扩展结点是排列树的叶结点的父结点。此时算法检测图G是否存在一条从顶点x[n-1]到顶点x[n]的边和一条从顶点x[n]到顶点1的边。如果这两条边都存在,则找到一条旅行售货员回路。此时,算法还需要判断这条回路的费用是否优于已找到的当前最优回路的费用bestc。如果是,则必须更新当前最优值bestc和当前最优解bestx。 当in时,当前扩展结点位于排列树的第i-1层。图G中存在从顶点x[i-1]到顶点x[i]的边时,x[1:i]构成图G的一条路径,且当x[1:i]的费用小于当前最优值时算法进入排列树的第i层,否则将减去相应的子树。算法中用变量cc记录当前路径x[1:i]的费用。 实验步骤 从起点开始,找其子结点,即存在一条边相连。 如果费用小于当前最优值则以此结点继续向下探索,否则就剪去相应的子树。 当扩展到叶结点的父结点时,检测此结点与叶结点,叶结点与起点是否有边相连。 若均有边相连,则检测此回路的费用是否小于最优费用。 若小于最优费用,则更新最优费用,同时记录最优解。 关键代码//定义图的顶点数 const int N = 4; /*================================================================= 定义Traveling类来存储的信息。 =================================================================*/ templateclass Type class Traveling { templateclass T friend T TSP(T **a, int n); private: void Backtrack(int i); int n, // 图G的顶点数 *x, // 当前解 *bestx; // 当前最优解 Type **a, // 图G的领接矩阵 cc, // 当前费用 bestc; // 当前最优值 int NoEdge; // 无边标记 }; /*================================================================= Backtrack函数为递归算法。 当i=n时,当前扩展结点是排列树的叶结点的父结点。此时算法检测图G是否存在一条从顶点x[n-1]到顶点x[n]的边和一条从顶点x[n]到顶点1的边。如果这两条边都存在,则找到一条旅行售货员回路。此时,算法还需要判断这条回路的费用是否优于已找到的当前最优回路的费用bestc。如果是,则必须更新当前最优值bestc和当前最优解bestx。 当in时,当前扩展结点位于排列树的第i-1层。图G中存在从顶点x[i-1]到顶点x[i]的边时,x[1:i]构成图G的一条路径,且当x[1:i]的费用小于当前最优值时算法进入排列树的第i层,否则将减去相应的子树。算法中用变量cc记录当前路径x[1:i]的费用。 =================================================================*/ templateclass Type void TravelingType::Backtrack(int i) { //前扩展结点是排列树的叶结点的父结点 if (i == n) { //检测是否存在一条从顶点x[n-1]到顶点x[n]的边和一条从顶点x[n]到顶点1的边 //存在且这条回路的费用小于已找到的最优费用 if (a[x[n-1]][x[n]] != 0 a[x[n]][1] != 0 (cc + a[x[n-1]][x[n]] + a[x[n]][1] bestc || b

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档