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 }
    追求吾之所爱
  • 相关阅读:
    javascript基础案例解析
    Javascript正则
    Javascript数组
    JS函数
    数据类型转换
    flex弹性布局
    css基础5
    css基础4
    场景化支付对现有技术、业务、产品和风险产生深刻的影响
    场景化支付的关键技术
  • 原文地址:https://www.cnblogs.com/rstz/p/12683968.html
Copyright © 2011-2022 走看看