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

旅行商问题范例.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析实验报告 实验三 旅行商问题 院系: 班级: 计算机科学与技术 学号: 姓名: 任课教师: 成绩: 湘 潭 大 学 2016年5月 实验三 旅行商问题 实验内容 分别编程实现回溯法和分支限界法求TSP问题的最优解,分析比较两种算法的时间复杂度并验证分析结果。 二.实验目的 1、掌握回溯法和分支限界法解决问题的一般步骤,学会使用回溯法和分支限界法解决实际问题; 2、理解回溯法和分支限界法的异同及各自的适用范围。 三. 算法描述 旅行商问题的回溯法算法可描述如下: Template class Type Class Traveling{ friend Type TSP(int ** , int[],int ,Type); Private; Void Backtrack(int i); Int n, //图G的顶点数 *x; //当前解 *bestx; //当前最优解 Type **a, //图G的邻接矩阵 cc, //当前费用 bestc, //当前最优解 NoEdge; //无边标记 }; Template class Type Void TravelingType : : backtrack(int i) {if(i ==n){ if(a[x[n-1]][x[n]]!=NoEdgea[x[n]][1]!=NoEdge (cc+a[x[n-1]][x[n]]+a[x[n]][1] +a[x[n]][1]bestc || bestc == NoEdge)){ for(int j = 1;j=n;j++) bestx[j] = x[j]; bestc == cc + a[x[n-1]][x[n]]+a[x[n]][1]}; }else{ For (int j = i;j= n;j++) //是否可进入x[j]子树? If(a[x[i-1]][x[j]] != NoEdge (cc+a[x[i-1]][x[j]] bestc || bestc == NoEdge)){ //搜素子树 Swap(x[i],x[j]); cc += a[x[i-1]][x[i]]; Backtrack(i + 1); cc -= a[x[i-1]][x[i]]; Swap(x[i],x[j]); } } } Templateclass Type Type TSP(Type**a, int v[], int n, Type NoEdge) {TravelingType Y; //初始化Y Y.x = new int [n+1]; //置x为单位排列 For(int i = 1;i = n;i++) Y.x[i] = i; Y.a = a; Y.n = n; Y.bestc = NoEdge; Y.bestx = v; Y.cc = 0; Y.NoEdge = NoEdge; //有哪些信誉好的足球投注网站x[2:n]的全排列 Y.Backtrack(2); Delete[]Y.x; Return Y.bestc; } 算法效率: 如果不考虑更新bestx所需的计算时间,则Backtrack需要O((n-1)!)计算时间。由于算法Backtrack在最坏情款下可能需要更新当前最优解O((n-1)!)次,每次更新需O(n)计算时间,从而整个算法的计算时间复杂性为O(n!)。 旅行商问题的分支界限法算法可描述如下: 使用优先队列来存储活节点,优先队列中的每个活节点都存储从根到该活节点的相应路径。具体算法可描述如下: Templateclass Type Class MinHeapNode{ firend TravelingType; Public: Operator Type() const {return lcost;} Private: Type lcost, //子树费用的下界 cc, //当前费用 rcost; //x[s:n-1]中定点最小出边费用和 Int s, //根节点到当前节点的路径为x[0:s] *x; //需要进一步有哪些信誉好的足球投注网站的顶点是x[s+1:n-1] }; 四. 算法实现 源程序代码 /*回溯法*/ #includestdio.h #includetime.h #define N 5 double cc,//当前路径费用 bestc;//当前最优解费用 double a[N+1][N+1];//邻接矩阵,存放图的信息

文档评论(0)

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

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

1亿VIP精品文档

相关文档