36 lines
961 B
TypeScript
36 lines
961 B
TypeScript
export {};
|
|
const input = require("fs").readFileSync(0).toString().trim().split("\n");
|
|
const inf: number = 1e9;
|
|
|
|
const N: number = Number(input[0]);
|
|
|
|
let W: number[][] = [];
|
|
for(let i=1; i<=N; i++) {
|
|
W.push(input[i].split(" ").map(Number));
|
|
}
|
|
|
|
let dp: number[][] = Array.from({length: N}, () => new Array(1<<N).fill(0));
|
|
|
|
const travel = (current: number, visited: number): number => {
|
|
if(visited === ((1<<N) - 1)) {
|
|
if(W[current][0] !== 0) return W[current][0];
|
|
return inf;
|
|
}
|
|
|
|
if(dp[current][visited] === 0) {
|
|
let min_cost: number = inf;
|
|
|
|
for(let next = 0; next <N; next++) {
|
|
if(W[current][next] === 0 || (visited & (1 << next))) continue;
|
|
|
|
const cost: number = W[current][next] + travel(next, (visited | (1 << next)));
|
|
min_cost = Math.min(cost, min_cost);
|
|
}
|
|
|
|
dp[current][visited] = min_cost;
|
|
}
|
|
|
|
return dp[current][visited];
|
|
};
|
|
|
|
console.log(travel(0,1)); |