动态规划-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 }
以上是关于动态规划-tsp的主要内容,如果未能解决你的问题,请参考以下文章
uva 116 Unidirectional TSP(动态规划,多段图上的最短路)