码迷,mamicode.com
首页 > Windows程序 > 详细

Acwing-91-最短Hamilton路径(状压DP)

时间:2019-09-04 00:40:26      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:href   content   its   ace   ret   can   mes   无向图   pac   

链接:

https://www.acwing.com/problem/content/93/

题意:

给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。

思路:

用二进制枚举哪些点被经过了.同时枚举经过的点j,再枚举经过点j之前的点k.
得到Dp[i][j] = min(Dp[i][j], Dp[lasti][k]+Len[k][j]).其中i对应经过点j时的压缩值,lasti为经过点j上一时刻的压缩值.

代码:

#include <bits/stdc++.h>
using namespace std;

int F[1<<20][30];
int Map[30][30];
int n;

int main()
{
    scanf("%d", &n);
    for (int i = 0;i < n;i++)
    {
        for (int j = 0;j < n;j++)
            scanf("%d", &Map[i][j]);
    }
    memset(F, 0x3f3f, sizeof(F));
    F[1][0] = 0;
    for (int i = 1;i < (1<<n);i++)
    {
        for (int j = 0;j < n;j++)
        {
            if ((i >> j) & 1)
            {
                for (int k = 0;k < n;k++)
                {
                    if ((i ^ (1<<j)) >> k & 1)
                        F[i][j] = min(F[i][j], F[i^(1<<j)][k]+Map[k][j]);
                }
            }
        }
    }
    printf("%d\n", F[(1<<n)-1][n-1]);

    return 0;
}

Acwing-91-最短Hamilton路径(状压DP)

标签:href   content   its   ace   ret   can   mes   无向图   pac   

原文地址:https://www.cnblogs.com/YDDDD/p/11456367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!