1584连接所有点的最小费用

let points = [[0,0],[2,2],[3,10],[5,2],[7,0]]
let n = points.length
let INF = Number.MAX_SAFE_INTEGER
let graph = Array(n).fill().map((val)=>{
  return Array(n).fill(0)
})
let minRoute = Array(n).fill(INF)
for(let i = 0;i<n;i++){
  for(let j = 0;j<n;j++){
    let [i_x,i_y] = points[i]
    let [j_x,j_y] = points[j]
    graph[i][j] = Math.abs(i_x-j_x)+Math.abs(i_y-j_y)
  }
}
minRoute[0] = 0
let used = Array(n).fill(false)
// console.log(minRoute);
let res = 0
for(let i = 0;i<n;i++){
  let cur = -1
  // 找到最小的
  for(let k = 0;k<n;k++){
    if(!used[k]&&(cur==-1||minRoute[k]<minRoute[cur])){
      cur = k
    }
  }
  used[cur] = true
  res = res + minRoute[cur]
  for(let m = 0;m < n;m++){
      minRoute[m] = Math.min(minRoute[m],graph[cur][m])
  }
}

console.log(res);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值