뭐라도 끄적이는 BLOG

Dijkstra Java Code 본문

기본이론/Algorithm

Dijkstra Java Code

Drawhale 2023. 7. 23. 13:17
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