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 |
댓글