1function tsp(dist) {
2 const n = dist.length;
3 const FULL = 1 << n;
4 const dp = Array.from({ length: FULL }, () => new Array(n).fill(Infinity));
5 dp[1][0] = 0;
6 for (let mask = 1; mask < FULL; mask++) {
7 if (!(mask & 1)) continue;
8 for (let u = 0; u < n; u++) {
9 if (!(mask & (1 << u)) || dp[mask][u] === Infinity) continue;
10 for (let v = 0; v < n; v++) {
11 if (mask & (1 << v)) continue;
12 const next = mask | (1 << v);
13 dp[next][v] = Math.min(dp[next][v], dp[mask][u] + dist[u][v]);
14 }
15 }
16 }
17 let ans = Infinity;
18 for (let u = 1; u < n; u++)
19 ans = Math.min(ans, dp[FULL - 1][u] + dist[u][0]);
20 return ans;
21}