狀壓dp 二進位制給定一張 n 個點的帶權無向圖,點從 0∼n−1 標號,求起點 0 到終點 n−1 的最短 hamilton 路徑。
hamilton 路徑的定義是從 0 到 n−1 不重不漏地經過每個點恰好一次。
輸入格式
第一行輸入整數 n。
接下來 n 行每行 n 個整數,其中第 i 行第 j 個整數表示點 i 到 j 的距離(記為 a[i,j])。
對於任意的 x,y,z,資料保證 a[x,x]=0,a[x,y]=a[y,x] 並且 a[x,y]+a[y,z]≥a[x,z]。
輸出格式
輸出乙個整數,表示最短 hamilton 路徑的長度。
資料範圍
1≤n≤20
0≤a[i,j]≤107
輸入樣例:
5輸出樣例:0 2 4 5 1
2 0 6 5 3
4 6 0 8 3
5 5 8 0 5
1 3 3 5 0
首先我們要思考如果讓這個np完全題目複雜度降低,那麼可以優先考慮到使用位運算,狀態壓縮等解決思路。然後接著思考,我們可以發現,我們所需要的不是整個方案,而只是方案最優解,所以我們只需要記錄當前這個方案的最優解即可,那麼我們考慮的狀態,不久只有,在當前方案i中,目前抵達的點是j。
現在既然裝填已經確定好了當前點j,那麼這個j點是由哪乙個狀態移動而來的呢?我們可以選擇k,也就是說我們的狀態轉移方程可以為
f[i]
[j]=min(f[i]
[j],f[i^(1<][k]+weight[k]
[j]
以上轉移方程,weight陣列為權值 ,也就是weight[k][j]是k點到j點的權值 i^(1<#include
using
namespace std;
int n,f[
1<<20]
[21],i,j,k;
int weight[21]
[21];
intmain()
AcWing 91 最短Hamilton路徑
91.最短hamilton路徑 給定一張 nn 個點的帶權無向圖,點從 0 n 1 標號,求起點 0 到終點 n 1 的最短hamilton路徑。hamilton路徑的定義是從 0 到 n 1 不重不漏地經過每個點恰好一次。輸入格式 第一行輸入整數nn。接下來nn行每行nn個整數,其中第ii行第jj...
91 AcWing 最短Hamilton路徑
原題鏈結 給定一張 n 個點的帶權無向圖,點從 0 n 1 標號,求起點 0 到終點 n 1 的最短hamilton路徑。hamilton路徑的定義是從 0 到 n 1 不重不漏地經過每個點恰好一次。輸入格式 第一行輸入整數n。接下來n行每行n個整數,其中第i行第j個整數表示點i到j的距離 記為a ...
AcWing 1134 最短路計數
題目描述 給出乙個 n 個頂點 m 條邊的無向無權圖,頂點編號為 1 到 n。問從頂點 1 開始,到其他每個點的最短路有幾條。輸入格式 第一行包含 2 個正整數 n,m,為圖的頂點數與邊數。接下來 m 行,每行兩個正整數 x,y,表示有一條頂點 x 連向頂點 y 的邊,請注意可能有自環與重邊。輸出格...