欢迎来到天天文库
浏览记录
ID:36730254
大小:122.85 KB
页数:21页
时间:2019-05-14
《动态规划法,回溯法,分支限界法求解TSP问题实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实用标准TSP问题算法实验报告指导教师:季晓慧姓名:辛瑞乾学号:1004131114提交日期:2015年11月文案大全实用标准目录总述2动态规划法2算法问题分析2算法设计2实现代码2输入输出截图5OJ提交截图5算法优化分析5回溯法5算法问题分析5算法设计6实现代码6输入输出截图8OJ提交截图8算法优化分析9分支限界法9算法问题分析9算法设计9实现代码9输入输出截图14OJ提交截图14算法优化分析14总结15文案大全实用标准总述TSP问题又称为旅行商问题,是指一个旅行商要历经所有城市一次最后又回到原来的城市,求最
2、短路程或最小花费,解决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]=
3、{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;i4、[j]中不包含i)对x[j]中的每个元素k,计算d[i][j]=min{mp[i][k]+dp[k][j-1]};文案大全实用标准1.输出最短路径长度。实现代码#include#include#include#include#include#include#include#include#include#include#include5、#include#include#include#include#include#include#include#include#include#include#definedebug"outputfordebug"#definepi(acos(-1.0))#defineeps(1e-8)#defineinf0x3f3f3f3f文案大全实用标准#define6、lllonglongint#definelsonl,m,rt<<1#definersonm+1,r,rt<<17、1usingnamespacestd;constintmod=1000000007;constintMax=100005;intn,mp[20][20],dp[20][40000];intmain(){while(~scanf("%d",&n)){intans=inf;memset(mp,0,sizeofmp);for(inti=0;i8、=j){mp[i][j]=inf;continue;}inttmp;scanf("%d",&tmp);mp[i][j]=tmp;}}intmx=(1<<(n-1));文案大全实用标准dp[0][0]=0;for(inti=1;i9、(j&(1<<(k-1)))>0){x=dp[k][(j-(1<<(k-1)))]+mp[i][k];y=min(y,x);}}dp[i][j]=y;}}}dp[0][mx-1]=inf;for(inti=1;i
4、[j]中不包含i)对x[j]中的每个元素k,计算d[i][j]=min{mp[i][k]+dp[k][j-1]};文案大全实用标准1.输出最短路径长度。实现代码#include#include#include#include#include#include#include#include#include#include#include
5、#include#include#include#include#include#include#include#include#include#include#definedebug"outputfordebug"#definepi(acos(-1.0))#defineeps(1e-8)#defineinf0x3f3f3f3f文案大全实用标准#define
6、lllonglongint#definelsonl,m,rt<<1#definersonm+1,r,rt<<1
7、1usingnamespacestd;constintmod=1000000007;constintMax=100005;intn,mp[20][20],dp[20][40000];intmain(){while(~scanf("%d",&n)){intans=inf;memset(mp,0,sizeofmp);for(inti=0;i8、=j){mp[i][j]=inf;continue;}inttmp;scanf("%d",&tmp);mp[i][j]=tmp;}}intmx=(1<<(n-1));文案大全实用标准dp[0][0]=0;for(inti=1;i9、(j&(1<<(k-1)))>0){x=dp[k][(j-(1<<(k-1)))]+mp[i][k];y=min(y,x);}}dp[i][j]=y;}}}dp[0][mx-1]=inf;for(inti=1;i
8、=j){mp[i][j]=inf;continue;}inttmp;scanf("%d",&tmp);mp[i][j]=tmp;}}intmx=(1<<(n-1));文案大全实用标准dp[0][0]=0;for(inti=1;i9、(j&(1<<(k-1)))>0){x=dp[k][(j-(1<<(k-1)))]+mp[i][k];y=min(y,x);}}dp[i][j]=y;}}}dp[0][mx-1]=inf;for(inti=1;i
9、(j&(1<<(k-1)))>0){x=dp[k][(j-(1<<(k-1)))]+mp[i][k];y=min(y,x);}}dp[i][j]=y;}}}dp[0][mx-1]=inf;for(inti=1;i
此文档下载收益归作者所有