动态规划-tsp

Posted hcl6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划-tsp相关的知识,希望对你有一定的参考价值。

技术图片
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <memory.h>
 4 using namespace std;
 5 const int INF=0x3f3f3f3f,city=4;
 6 int main(){
 7     int a[city][city],dp[city][1<<city];
 8     memset(dp,INF,sizeof(dp));
 9     for(int i=0;i<city;i++){
10         for(int j=0;j<city;j++){
11             scanf("%d",&a[i][j]);
12         }
13     } 
14     for(int i=0;i<city;i++)//初始化第一列 
15         dp[i][0]=a[i][0];
16     for(int j=1;j<(1<<(city-1));j++){//111 j<2^3 初始化剩余列 
17         for(int i=0;i<city;i++){
18             if(((j>>i-1)&1)==0){// i不在集合里面 关于位运算移动负数位,求出负数的补码,取低六位,进行移动。
19                 for(int k=1;k<city;k++){
20                     if(((j>>k-1)&1)==1){//对于集合里每一个元素开始min 
21                         dp[i][j]=min(dp[i][j],a[i][k]+dp[k][j^(1<<k-1)]);
22                     }
23                 }
24             }
25         }
26     }
27     for(int i=0;i<city;i++){
28         for(int j=0;j<(1<<city-1);j++){
29             if(dp[i][j]!=INF)
30                 cout<<dp[i][j]<<" ";
31             else
32                 cout<<"-1 ";
33         }
34         cout<<endl;
35     }
36     printf("最短路径是:"); 
37     if(dp[0][(1<<city-1)-1]!=INF)
38         cout<<dp[0][(1<<city-1)-1]<<endl;
39     else
40         cout<<"-1"<<endl;
41 }
View Code

技术图片

以上是关于动态规划-tsp的主要内容,如果未能解决你的问题,请参考以下文章

动态规划-tsp

uva 116 Unidirectional TSP(动态规划,多段图上的最短路)

利用动态规划求解旅行商问题(Travelling Salesman Problem)时空复杂度分析以及相关实验验证

数学建模基于随机机会约束规划方法对旅行商问题TSP求解

TSP问题基于蚁群算法求解TSP问题matlab源码

路径规划基于蚁群算法求解TSP问题