动态规划法回溯法分支限界法求解TSP问题实验报告.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TSP问题算法实验报告指导教师:季晓慧
姓名:辛瑞乾
学号:
提交日期:2015年11月
目录
总述 ......................................................................
动态规划法................................................................
算法问题分析............................................................
算法设计................................................................
实现代码................................................................
输入输出截图............................................................
OJ提交截图 ..............................................................
算法优化分析............................................................
回溯法 ....................................................................
算法问题分析............................................................
算法设计................................................................
实现代码................................................................
输入输出截图............................................................
OJ提交截图 ..............................................................
算法优化分析............................................................
分支限界法................................................................
算法问题分析............................................................
算法设计................................................................
实现代码................................................................
输入输出截图............................................................
OJ提交截图 ..............................................................
算法优化分析............................................................
总结 ......................................................................
总述
TSP问题又称为旅行商问题,是指一个旅行商要历经所有城市一次最后又回到原来的城市,求最短路程或最小花费,解决TSP可以用好多算法,比如蛮力法,动态规划法⋯具体的时间复杂的也各有差异,本次实验报告包含动
态规划法,回溯法以及分支限界法。
动态规划法
算法问题分析
假设 n 个顶点分别用0~n-1 的数字编号,顶点之间的代价存放在数组mp[n][n] 中,下面考虑从顶点0 出发求解 TSP问题的填表形式。首先,按个数为 1、2、⋯、 n-1 的顺序生成1~n-1 个元素的子集存放在数组x[2^n-1] 中,例如当n=4时,x[1]={1},x[2]={2},x[3]={3},x[4]={1,2},x[5]={1,3},x[6]={2,3},x[7]=
{1,2,3} 。设数组dp[n][2^n-1] 存放迭代结果,其中dp[i][j] 表示从顶点i 经过子集x[j] 中的顶点一次且一次,最后回到出发点0 的最短路径长度,动态规划法求解TSP问题的算法如下。
算法设计
输入:图的代价矩阵mp[n][n]
输出:从顶点 0 出发经过所有顶点一次且仅一次再回到顶点0 的最短路径长度
1.初始化第 0 列(动态规划的边界问题)
for(i=1;i dp[i][0]=mp[i][0] 2.依次处理每个子集数组 x[2^n-1] for(i=1;i if (子集 x[j]中不包含i) 对x[j] 中的每个元素 k,计算 d[i][j]=min{mp[i][k]+dp[k][j-1]}; 3.输出最短路径长度。 实现代码 #include #include #include #include #include #include #include #include