給定一張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)表示"點是否被經過的狀態"對應的二進位制數,且目前處於點j(0<=j20*20=20971520,是可以開的下的。
#include#includeusing namespace std;
typedef long long ll;
int n;
int a[20][20];
int f[1<<20][20];
int hamilton()
最短Hamilton路徑 CH0103
題面描述 給定一張 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 不重不漏地經過每個點恰好一次。思...
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 對...