티스토리 뷰

https://www.acmicpc.net/problem/2098

 

2098번: 외판원 순회

첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 16) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j

www.acmicpc.net

 

 

 

const fs = require('fs');
const board = fs.readFileSync("./dev/stdin").toString().split('\n').map(v=>v.split(' ').map(Number))
const [N] = board.shift();


let cost = Array.from(Array(N),()=>Array(1<<N).fill(-1));


const dfs = (now,visited)=>{
  if(visited==(1<<N)-1){
    if(board[now][0]==0) return Infinity;
    else return board[now][0];
  }

  if(cost[now][visited] != -1) return cost[now][visited];

  cost[now][visited] = Infinity;

  for(let i = 0; i<N; i++){
    if(board[now][i]==0) continue;
    if((visited & (1<<i))) continue;
    cost[now][visited] = Math.min(cost[now][visited],board[now][i]+dfs(i,visited| (1<<i)));
  }
  return cost[now][visited];
}

console.log(dfs(0,1));

 

 

 

 

 

 

 

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함