일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Algorithm
- JavaScript
- Fluent-bit
- SpringBoot Initializr
- zgc
- quicksort
- UserDetails
- While
- datatype
- Kotlin
- 연산자
- Sprint Security
- lambda
- IAC
- Spring Security
- g1gc
- 기초
- 자료형
- Java
- C++
- MergeSort
- JPA
- jvm
- ansible
- programmers
- If
- For
- Class
- datastructure
- redis
Archives
- Today
- Total
뭐라도 끄적이는 BLOG
Dijkstra Java Code 본문
import java.util.*;
public class DijkstraProblem {
public static void main(String[] args) {
/**
* Dijkstra 문제를 풀 때 사용한 Java Code
*/
int v = 5; // vertex 갯수
int e = 6; // edge 갯수
int[][] nodes = {{5,1,1},{1,2,2},{1,3,3},{2,3,4},{2,4,5},{3,4,6}}; // node, node, 거리
Integer start = 1; // 시작 노드
Map<Integer, Map<Integer, Integer>> graph = new HashMap<>();
Map<Integer, Integer> dist = new HashMap<>();
Set<Integer> visited = new HashSet<>();
for (int i = 1; i <= v; i++) {
graph.put(i, new HashMap<>());
dist.put(i, Integer.MAX_VALUE);
}
dist.put(start, 0);
for (int i = 0; i < e; i++) {
int node1 = nodes[i][0];
int node2 = nodes[i][1];
int distance = nodes[i][2];
graph.get(node1).put(node2, distance);
graph.get(node2).put(node1, distance);
}
System.out.println(graph);
System.out.println(dist);
System.out.println(visited);
for (int i = 0; i < v; i++) {
int nodeIdx = dist.entrySet().stream()
.filter(map -> !visited.contains(map.getKey()))
.min(Comparator.comparingInt(Map.Entry::getValue))
.get().getKey();
visited.add(nodeIdx);
graph.get(nodeIdx).forEach((key, value) -> {
if (dist.get(key) > dist.get(nodeIdx) + value)
dist.put(key, dist.get(nodeIdx) + value);
});
}
System.out.println(dist);
}
}
graph에 그래프를 저장해놓고 dist에는 각노드의 최소 거리 visited에는 각 노드 방문여부를 저장하였습니다.
반응형
'기본이론 > Algorithm' 카테고리의 다른 글
Sort - QuickSort vs MergeSort (0) | 2023.06.18 |
---|---|
Sort - MergeSort (0) | 2023.06.18 |
Sort - QuickSort (0) | 2023.06.18 |
Algorithm (0) | 2023.06.18 |