給定 n 個城市及任意兩城市間距離,求訪問每個城市恰好一次並返回起點的最短路徑長度。
dp[mask][i]:已訪問城市集合為 mask (bitmask),當前位於城市 i 的最短路徑長度。
mask 第 j 位為 1 表示城市 j 已訪問。
dp[mask | (1<
dp[1<
min(dp[(1<
#include <bits/stdc++.h>
using namespace std;
const double INF = 1e18;
double tsp(vector>& dist) {
int n = dist.size();
int ALL = 1 << n;
vector> dp(ALL, vector(n, INF));
dp[1][0] = 0; // 從城市 0 出發
for (int mask = 1; mask < ALL; ++mask) {
for (int u = 0; u < n; ++u) if (dp[mask][u] < INF) {
for (int v = 0; v < n; ++v) if (!(mask & (1<