最短Hamilton路徑 CH0103

2021-09-18 03:45:28 字數 683 閱讀 4732

題面描述

給定一張 n(n

≤20

)n(n≤20)

n(n≤20

) 個點的帶權無向圖,點從 0

00 ~ n−1

n-1n−

1 標號,求起點 0

00 到終點 n−1

n-1n−

1 的最短hamilton路徑。 hamilton路徑的定義是從 0

00 到 n−1

n-1n−

1 不重不漏地經過每個點恰好一次。

思路

首先想到的肯定是暴力列舉,但由於時間複雜度太高,實際上是不想打

再者可以用二進位制表示點,就有2j2^

2j表示我經歷了j這個點,具體可看**。

**

#include

#include

#include

#include

#include

using

namespace std;

int f[

1<<20]

[20];

int map[20]

[20];

intmain()

最短Hamilton路徑 CH0103

給定一張n n 20 個點的帶權無向圖,點從0 n 1標號,求起點0到終點n 1的最短hamilton路徑。hamilton路徑定義為每個頂點正好經過一次的路徑。題解 列舉所有情況的時間複雜度是o n n 使用二進位制狀態壓縮dp可以優化到o n2 2n 用乙個陣列f i j 維護當i 0 i 2n...

CH0103 最短Hamilton路徑 狀壓DP

狀壓dp,狀態 f i j f i j f i j 用 n nn 位二進位制數 i ii 來表示每個點是否被經過,同時 j jj 記錄當前路徑終點,每次列舉 j jj 的前乙個點,確定上一狀態,轉移即可,注意求最小值,先將 f ff 陣列置為正無窮,令 f 1 0 0 f 1 0 0 f 1 0 0...

CH0103 最短Hamilton路徑(狀壓DP)

給定一張 n 個點的帶權無向圖,點從 0 n 1 標號,求起點 0 到終點 n 1 的最短hamilton路徑。hamilton路徑的定義是從 0 到 n 1 不重不漏地經過每個點恰好一次。輸入格式 第一行輸入整數n。接下來n行每行n個整數,其中第i行第j個整數表示點i到j的距離 記為a i,j 對...