본문 바로가기
BEB/algorithm

48_FloydWarshall

by ddanss 2023. 1. 19.
728x90
function FloydWarshall(num, edges) {
  let adj = Array.from(Array(num+2), () => Array(num+2).fill(123456789)); //그래프
  let res = Array.from(Array(num), () => Array(num).fill(0)) //결과를 출력할 배열
  for(let i=0;i<edges.length;i++) {
  	let start = edges[i][0];
    let end = edges[i][1];
    let distance = edges[i][2];
    adj[start][end] = distance; //start부터 end까지의 거리
  }
  for(let i=1;i<=num;i++) {
    adj[i][i] = 0; //자기자신까지의 거리는 0
  }
  for(let k=1;k<=num;k++) {
    for(let i=1;i<=num;i++) {
      for(let j=1;j<=num;j++) {
      //i부터 j까지 가는데 k를 거쳐 가는 방법
        if(adj[i][j] > adj[i][k] + adj[k][j]) {
          adj[i][j] = adj[i][k] + adj[k][j];
        }
      }
    }
  }
  for(let i=0;i<num;i++) {
    for(let j=0;j<num;j++) {
    //가는 방법이 없거나 거리가 100보다 크다면 null
    //아니면 값 그대로 저장
      if(adj[i+1][j+1]===123456789 || adj[i+1][j+1] > 100) res[i][j] = null;
      else res[i][j] = adj[i+1][j+1];
    }
  }
  return res;
}
반응형

'BEB > algorithm' 카테고리의 다른 글

47_Dijkstra  (0) 2023.01.22
46_0-1Knapsack  (0) 2023.01.15
45_subsetSum  (0) 2023.01.09
41_countIslands  (0) 2022.12.22
40_longestPalindrome 가장긴 팰린드롬  (0) 2022.12.20

댓글