首页 > 其他 > 详细

最短Hamilton路径

时间:2020-02-26 14:20:26      阅读:55      评论:0      收藏:0      [点我收藏+]

最短Hamilton路径

利用动态规划可以很好地解决这个问题。

\(dp[i][j]\)中 i 利用状态压缩,可以表示已经走过了多少个点,j 表示的是当前所在点。

// Created by CAD on 2020/2/26.
#include <bits/stdc++.h>
#define mst(name, value) memset(name,value,sizeof(name))
using namespace std;

int dp[1<<20][25];
int g[25][25];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;cin>>n;
    for(int i=0;i<n;++i)
        for(int j=0;j<n;++j) cin>>g[i][j];
    mst(dp,0x7f);
    dp[1][0]=0;
    for(int k=0; k<(1 << n); ++k){
        for(int i=0;i<n;++i)
            if(k>>i&1) continue;
            else
                for(int j=0;j<n;++j)
                    if(k>>j&1)
                        dp[k|1<<i][i]=min(dp[k|1<<i][i],dp[k][j]+g[j][i]);
    }
    cout<<dp[(1<<n)-1][n-1]<<"\n";
    return 0;
}

最短Hamilton路径

原文:https://www.cnblogs.com/CADCADCAD/p/12366789.html

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