算法板子

#include<bits/stdc++.h>
using namespace std;
const int N  = 2e6;
int f[N][21];
int m[21][21];
int n;
int main() {
    cin >> n;
    for (int r = 1; r <= n; ++r) {
        for (int c = 1; c <= n; ++c) {
            cin >> m[r][c];
        }
    }
    memset(f, 0x3f, sizeof f);
    f[1][1] = 0;
    for (int i = 0; i < 1 << n; ++i) {
        for (int j = 1; j <= n; ++j) {
            if (f[i][j] >= 0x3f3f3f3f) continue;
            if ((i >> (j - 1) & 1) == 0) continue;
            for (int k = 1; k <= n; ++k) {
                if (k == j) continue;
                if (i >> (k - 1) & 1) continue;
                f[i | 1 << (k - 1)][k] = min(f[i | 1 << (k - 1)][k], f[i][j] + m[j][k]);
            }
        }
    }
    cout << f[(1 << n) - 1][n] << endl;
    return 0;
}
本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,说不定哪天故事又继续更新了呢。
本文地址:https://qoogle.top/the-shortest-path-of-hamilton-state-compression-dp/
最后修改日期:2020年6月28日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。