You are on page 1of 4

Tugas Algoritma dan Struktur Data

Dijkstra Algorithm
Hendri Purnomo F1B009073

Hendri Purnomo F1B009073 Dijkstra import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.PriorityQueue; class Vertex implements Comparable<Vertex>{ public final String st; public Edge[] edges; public double distance = Double.POSITIVE_INFINITY; public Vertex previous; public Vertex(String argName) { st = argName; } @Override public String toString() { return st; } @Override public int compareTo(Vertex other) { return Double.compare(distance, other.distance); } } class Edge { public final Vertex target; public final double weight; public Edge(Vertex argTarget, double argWeight){ target = argTarget; weight = argWeight; } } class DijkastraAlgorithm{ public static void computePaths(Vertex source){ source.distance = 0; PriorityQueue<Vertex> queue = new PriorityQueue<>(); queue.add(source); while (!queue.isEmpty()) { Vertex vx = queue.poll(); for (Edge e : vx.edges){ Vertex v = e.target; double weight = e.weight; double distanceTo = vx.distance + weight; if (distanceTo < v.distance) { queue.remove(v); v.distance = distanceTo ; v.previous = vx; queue.add(v);

Hendri Purnomo F1B009073 Dijkstra } } } } public static List<Vertex> getShortestPathTo(Vertex target){ List<Vertex> path = new ArrayList<>(); for (Vertex vertex = target; vertex != null; vertex = vertex.previous) path.add(vertex); Collections.reverse(path); return path; } public static void main(String[] args){ Vertex v0 = new Vertex("Mataram"); Vertex v1 = new Vertex("Rembiga"); Vertex v2 = new Vertex("Gomong"); Vertex v3 = new Vertex("Kekalik"); Vertex v4= new Vertex("Sweta"); Vertex v5 = new Vertex("Cemara"); Vertex v6 = new Vertex("Pagutan"); v0.edges = new Edge[]{ new Edge(v1, 80), new Edge(v5, 81) }; v1.edges = new Edge[]{ new Edge(v0, 80), new Edge(v2, 40), new Edge(v3, 100) }; v2.edges = new Edge[]{ new Edge(v1, 40) }; v3.edges = new Edge[]{ new Edge(v1, 103), new Edge(v5, 61), new Edge(v6, 97) }; v4.edges = new Edge[]{ new Edge(v5, 133) }; v5.edges = new Edge[]{ new Edge(v0, 88), new Edge(v3, 62), new Edge(v4, 134), new Edge(v6, 92) }; v6.edges = new Edge[]{ new Edge(v3, 97), new Edge(v5, 88) }; Vertex[] vertices = { v0, v1, v2, v3, v4, v5, v6}; computePaths(v0); for (Vertex v : vertices){ System.out.println("Jarak ke " + v + ": " + v.distance); List<Vertex> Lintasan = getShortestPathTo(v); System.out.println("Path: " + Lintasan); System.out.println("-----------------------------------"); } } }

Hendri Purnomo F1B009073 Dijkstra Output

You might also like