ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:18.73KB ,
资源ID:20232335      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20232335.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(动态规划法回溯法分支限界法求解TSP问题实验报告docWord格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

动态规划法回溯法分支限界法求解TSP问题实验报告docWord格式.docx

1、mpnn 中,下面考虑从顶点 0 出发求解 TSP问题的填表形式。首先,按个数为 1、2、 n-1 的顺序生成 1n-1 个元素的子集存放在数组 x2n-1中 , 例 如 当 n=4 时 ,x1=1,x2=2,x3=3,x4=1,2,x5=1,3,x6=2,3,x7=1,2,3。设数组dpn2n-1存放迭代结果,其中dpij表示从顶点i经过子集xj中的顶点一次且一次, 最后回到出发点0 的最短路径长度, 动态规划法求解TSP问题的算法如下。算法设计输入:图的代价矩阵 mpnn输出:从顶点 0 出发经过所有顶点一次且仅一次再回到顶点 0 的最短路径长度1.初始化第 0 列(动态规划的边界问题)

2、for(i=1;in;i+)dpi0=mpi02.依次处理每个子集数组 x2n-1for(i=1;if (子集 xj 中不包含 i )对xj 中的每个元素 k,计算 dij=minmpik+dpkj-1;2.输出最短路径长度。实现代码#include cstdlibcstringcmathctimeiostreamalgorithmstringvectordequelistsetmapstackqueuecctypenumericiomanipbitsetsstreamfstream#define debug output for debugn#define pi (acos)#define

3、eps (1e-8)#define inf 0x3f3f3f3f#define ll long long int#define lson l , m , rt 1#define rson m + 1 , r , rt 1 | 1using namespace std;const int Max = 100005;int n,mp2020,dp2040000;int main()while(scanf(%d,&n)int ans=inf;memset(mp,0,sizeof mp);for(int i=0; i i+)for(int j=0; j j+)if(i=j)mpij=inf;conti

4、nue;int tmp;scanf(tmp);mpij=tmp;int mx=(1(n-1);dp00=0;for(int i=1;dpi0=mpi0;dp0mx-1=inf;for(int j=1;(mx-1);if(j&(1(i-1)=0)int x,y=inf;for(int k=1; k0)x=dpk(j-(1(k-1)+mpik;y=min(y,x);dpij=y;dp0mx-1=min(dp0mx-1,mp0i+dpi(mx-1)-(1=1)、xk=xk+1 ,搜索下一个顶点。、若 n 个顶点没有被穷举完,则执行下列操作E,转步骤;、若数组 xn 已经形成哈密顿路径,则输出数组 x

5、n ,算法结束;、若数组 xn 构成哈密顿路径的部分解,则 k=k+1,转步骤 3;、否则,取消顶点 xk 的访问标志,重置 xk,k=k-1 ,转步骤 3。int mp2020;int x30,vis30;int n,k,cur,ans;void init()jj+)mpij=-1;ans=-1;cur=0;=n;i+)xi=i;void dfs(int t)if(t=n)if(mpxn-1xn!=-1&(mpxn1!=-1)&(cur+mpxn-1xn +mpxn1ans|ans=-1)visi=xi;ans=cur+mpxn-1xn+mpxn1;elsefor(int i=t;if(mp

6、xt-1xi!(cur+mpxt-1xiswap(xt,xi);cur+=mpxt-1xt;dfs(t+1);cur-=mpxt-1xt;init();mpij);egin();sum+=*it;it+;return sum/2;int gao(node s)int res=*2;int t1=inf,t2=inf;if(!i)t1=min(t1,mpi);t2=min(t2,mpi);res+=t1;res+=t2;tmp=inf;it=Mpi.begin();res+=*it;tmp=min(tmp,mpji);res+=tmp;return !(res%2) ? (res/2):(res

7、/2+1);void bfs(node s)(s);while(!()node head=();();if=n-1)int p;p=i;break;int cnt=+mpp+mpp;node tmp=();if(cnt=ans=min(ans,cnt);return;up=min(up,cnt);node tmp;=;=+mpi;=i;=+1; j+) j=j;i=1;=gao(tmp);if=up)(tmp);Mpi.clear();if(i!=j)Mpi.push_back(mpij);sort(Mpi.begin(),Mpi.end();memset(vis,0,sizeof vis);

8、vis1=1;up=0;up+=getup(1,1,up);low=getlow();node fir;=1; i+) i=0;1=1;=0;=low;ans=inf;bfs(fir);printf(,ans);分支限界法的复杂度是根据数据的不同而不同,搜索的节点越少,复杂度越低,跟目标函数的选择有很大关系。目标函数值的计算也会需要一定时间,比如此文章中的目标函数值求解的复杂度是 O(n2 ) 。当然此算法仍然有可以优化的地方, 比如在记录该路径每个叶子结点的孩子结点时可以采用二进制的思想,从而使算法的时间复杂度在下降到当前 T/n 的数量级,解决COJ1814问题应该不成问题。总结TSP问题在很多地方都可以运用到, 并且好多问题都是由 TSP问题延伸和发展的,也可以称之为 TSP问题,不过其思路大致相似,于是我们可以运用已学过的算法对其进行解决。 我在学习算法课以前的 TSP问题大都用动态规划以及回溯法,究其时间复杂度以及代码的复杂度比较低,思路比较清晰,在解决此类延伸问题时容易调试和修改。学完算法后最有感触的一点就是,算法的精髓并不在于其方式方法,而在于其思想思路。有了算法的思想,那么潜移默化中问题就可以得到解决。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1