最短Hamilton路徑(二進位制狀態壓縮)
阿新 • • 發佈:2018-11-02
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include <vector> #include<queue> #include <stack> #include <map> #define maxn 25 #define INF 0x3f3f3f3f #define LL long long using namespace std; int dp[1<<20][20]; int a[20][20]; int n; int main() { cin>>n; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>a[i][j]; } } memset(dp,0x3f,sizeof(dp)); dp[1][0]=0; for(int i=0;i<(1<<n);i++) { for(int j=0;j<n;j++) { if((i>>j)&1)//如果第j位為1 { for(int k=0;k<n;k++) { if((i^(1<<j)>>k)&1) { dp[i][j]=min(dp[i][j],dp[(i^(1<<j))][k]+a[k][j]); } } } } } cout << dp[(1<<n)-1][n-1] << endl; return 0; }