|
Tests |
data-syntaxhighlighter-params="brush: java; gutter: false; theme: Confluence" data-theme=Confluence>public class DijkstraShortestPath static class Vertex implements ComparableVertex { String name;> ListEdge adjacencyList = new ArrayList(); boolean visited; Vertex predecessor;> int distance = Integer.MAX_VALUE;> > Vertex(String name)> {> this.name = name;> } void addNeighbor(Edge edge)> {> adjacencyList.add(edge); > } @Override> public int compareTo(Vertex o)> {> return Integer.compare(distance, o.distance);> }> @Override public String toString() {> return "Vertex{" +> "name='" + name + '\'' + > '}';> }> } static class Edge> {> int weight;> Vertex fromVertex;> Vertex toVertex;> Edge(int weight, Vertex fromVertex, Vertex toVertex)> {> this.weight = weight; > this.fromVertex = fromVertex;> this.toVertex = toVertex;> fromVertex.addNeighbor(this); } }> static private void computePathFrom(Vertex sourceVertex)> { sourceVertex.distance = 0; > PriorityQueueVertex pq = new PriorityQueue(); pq.add(sourceVertex); while(!pq.isEmpty()) {> Vertex vertex = pq.poll();> if(!vertex.visited)> { > vertex.visited = true;> for(Edge edge : vertex.adjacencyList) > { > Vertex targetVertex = edge.toVertex; > int distance = vertex.distance + edge.weight; if(targetVertex.distance distance)> {> targetVertex.distance = distance;> targetVertex.predecessor = vertex; > pq.add(targetVertex);> }> }> } > } } > private static int getShortestPath(Vertex targetVertex, ListVertex result) {> for(Vertex vertex = targetVertex; vertex != null; vertex = vertex.predecessor) { result.add(vertex);> }> int distance = result.get(0).distance;> Collections.reverse(result);> return distance;> } static int getShortestPath(Vertex fromVertex, Vertex toVertex, ListVertex path) { computePathFrom(fromVertex); return getShortestPath(toVertex, path); }>} |
data-syntaxhighlighter-params="brush: java; gutter: false; theme: Confluence" data-theme=Confluence>static boolean testsPass() Vertex a = new Vertex("A"); Vertex b = new Vertex("B"); Vertex c = new Vertex("C"); Vertex d = new Vertex("D"); Vertex e = new Vertex("E"); Vertex f = new Vertex("F"); Vertex g = new Vertex("G"); Vertex h = new Vertex("H"); new Edge(5, a, b); new Edge(8, a, h);> new Edge(9, a, e);> new Edge(5, e, h);> new Edge(4, e, f); > new Edge(20, e, g);> new Edge(15, b, d);> new Edge(12, b, c);> new Edge(4, b, h);> new Edge(6, h, f);> new Edge(7, h, c);> new Edge(1, f, c);> new Edge(13, f, g);> new Edge(9, d, g); > new Edge(11, c, g);> ListVertex path = new ArrayList();pre data-role="codeBlock" data-info="js" class="language-javascript"> int distance = getShortestPath(a, g, path);> boolean check = distance == 25;> if(!check)> {> return false;> } check = path.get(0).name.equals("A") && path.get(1).name.equals("E") &&> path.get(2).name.equals("F") && path.get(3).name.equals("C") &&> path.get(4).name.equals("G"); > if(!check)> { return false; }> return true;>} |