zoukankan      html  css  js  c++  java
  • Hamilton路径(模板题)

    image


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

    •   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 
       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 }
    追求吾之所爱
  • 相关阅读:
    文件搜索和图像裁剪
    Mat的复制
    map
    substr
    cin,scanf
    strstr
    Applying vector median filter on RGB image based on matlab
    sobel算子的一些细节
    matlab 有趣小细节
    高斯混合模型(GMM)
  • 原文地址:https://www.cnblogs.com/rstz/p/14391047.html
Copyright © 2011-2022 走看看