其他分享
首页 > 其他分享> > acwing 91. 最短Hamilton路径

acwing 91. 最短Hamilton路径

作者:互联网

状压dp,模板
f[i][j]表示以i为当前状态,j为终点的路径长度,属性:min
#include<bits/stdc++.h>
using namespace std;

const int N = 21,M = 1<<20;

int f[M][N],weight[N][N];

int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>weight[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++)
                    if((i-(1<<j))>>k&1)//判断以j为终点的点能否由以k为终点的点转移过来
                        f[i][j]=min(f[i][j],f[i-(1<<j)][k]+weight[k][j]);
    
    cout<<f[(1<<n)-1][n-1];
    return 0;
}

标签:终点,min,int,路径,0x3f,能否,Hamilton,91,acwing
来源: https://www.cnblogs.com/xhy666/p/16253073.html