首页 > 其他 > 详细

最短Hamilton路径(模板提)

时间:2020-04-12 11:02:32      阅读:48      评论:0      收藏:0      [点我收藏+]

技术分享图片


运用二进制状态压缩,模板题

  1 #include <iostream>
  2 #include <algorithm>
  3 #include <cstring>
  4 using namespace std;
  5 
  6 int f[1 << 20][20], weight[20][20], n;//f[i][j]表示的时状态为i的集合,j 表示在这个状态下的位于的位置,f[i][j]表示的最小的值
  7 int hamilton(){
  8     memset(f, 0x3f, sizeof f);
  9     f[1][0] = 0;
 10     for(int i = 1; i < 1 << n; ++ i)//枚举状态,也就是几个点的集合,
 11         for(int j = 0; j < n; ++ j) if(i >> j & 1)//如果这个点是1那么,状态是成立的
 12         for(int k = 0; k < n; ++ k) if(i >> k & 1)
 13         f[i][j] = min(f[i][j], f[i^1<<j][k] + weight[k][j]); // i^1<<j上一个状态转移过来的结果
 14     return f[(1<<n)-1][n-1];
 15 }
 16 int main(){
 17 
 18     cin >> n;
 19     for(int i = 0; i < n; ++ i)
 20         for(int j = 0,a; j < n; ++ j)
 21             cin >> weight[i][j];
 22     cout << hamilton() << endl;
 23     return 0;
 24 }

最短Hamilton路径(模板提)

原文:https://www.cnblogs.com/rstz/p/12683968.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!