728x90
function Dijkstra(num, edges, start, end) {
let fix = new Array(102).fill(0); //고정되었는지
let d = new Array(102).fill(1234567); //거리
let adj = {};//이렇게하고 바로 push를 하지 못하기때문에
for(let i=1;i<=num;i++) adj[i] = []; //이것도 처리해줘야한다
for(let i=0;i<edges.length;i++) { //입력된 정점들을 연결하고 거리까지 저장해둔다
adj[edges[i][0]].push({node: edges[i][1], distance: edges[i][2]});
adj[edges[i][1]].push({node: edges[i][0], distance: edges[i][2]});
}
d[start] = 0; //자기자신으로 가는건 0
for(;;) {
let idx = -1; //초기값을 -1로 잡고
for(let i=1;i<=num;i++) {
if(fix[i]) continue; //이미 fix 되어있으면 continue;
if(idx===-1) idx = i; //초기값이면 바로 나오는 i값을 idx에 넣고
else if(d[i]<d[idx]) idx=i; //이미 idx에 값이 들어가있으면 i와 누가 더 짧은 거리인지 비교한다
}
if(idx===-1 || d[idx] === 1234567) break; //모두 fix되었거나 갈 수 있는 방법이 없으면 break;
fix[idx]=1; //가장 작은 값이니 고정시켜둔다
for(let i=0;i<adj[idx].length;i++) {
d[adj[idx][i].node] = Math.min(d[adj[idx][i].node], d[idx]+adj[idx][i].distance);
}
}
return d[end];//end까지의 거리 출력
}반응형
'BEB > algorithm' 카테고리의 다른 글
| 48_FloydWarshall (0) | 2023.01.19 |
|---|---|
| 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 |
댓글