91. 最短Hamilton路径状压DP

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了91. 最短Hamilton路径状压DP相关的知识,希望对你有一定的参考价值。


f[i][j]] 表示走了i状态 且最终点是j的最短路径

#include<bits/stdc++.h>
using namespace std;
const int N=20;
int f[1<<N][20],a[N][N],n;
int main(void)

    cin>>n;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++) 
            cin>>a[i][j];
    memset(f,0x3f,sizeof f);
    f[1][0]=0;//初始在起点 
    for(int i=0;i<(1<<n);i++)
    
        for(int j=0;j<n;j++)
        
            if(i>>j&1)//有终点j
            
                for(int k=0;k<n;k++)
                
                    int temp=i-(1<<j);
                    if(temp>>k&1) f[i][j]=min(f[i][j],f[i-(1<<j)][k]+a[k][j]);
                    //有中间点k
                
            
        
    
    cout<<f[(1<<n)-1][n-1];
    return 0;

以上是关于91. 最短Hamilton路径状压DP的主要内容,如果未能解决你的问题,请参考以下文章

ACwing91 最短Hamilton路径 状压dp

AcWing91 最短Hamilton路径 (状压dp)

AcWing 91 最短Hamilton路径(状压dp)

ybtoj 状压DP课堂过关AcWing 91最短 Hamilton 路径 &例题2最短路径

最短Hamilton路径-状压dp解法

AcWing 91. 最短Hamilton路径