码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划-tsp

时间:2020-11-19 12:53:22      阅读:10      评论:0      收藏:0      [点我收藏+]

标签:view   rgb   路径   end   数位   eof   ==   img   span   

技术图片
 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

标签:view   rgb   路径   end   数位   eof   ==   img   span   

原文地址:https://www.cnblogs.com/hcl6/p/13974465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!