package id.ac.itats.skripsi.shortestpath.engine; import id.ac.itats.skripsi.orm.Node; import id.ac.itats.skripsi.orm.Way; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.PriorityQueue; import android.util.Log; public class DijkstraDB { protected static final String TAG = "Dijkstra"; public static void computePaths(Node source) { source.minDistance = 0.; PriorityQueue<Node> vertexQueue = new PriorityQueue<Node>(); vertexQueue.add(source); Log.e(TAG, "vertequeue size "+vertexQueue.size()); while (!vertexQueue.isEmpty()) { Node u = vertexQueue.poll(); Log.i(TAG, "Node u : "+u.minDistance); for (Way e : u.getSourceAdjacencies()) { Log.i(TAG, "Way "+e.getWayID()); Node v = e.getTargetNode(); Log.i(TAG, "Node v : "+v.getNodeID()); Log.i(TAG, "Node v : "+v.minDistance); double weight = e.getWeight(); Log.i(TAG, "weight : "+weight); double distanceThroughU = u.minDistance + weight; Log.i(TAG, "distanceThroughU : "+distanceThroughU); Log.e(TAG,""+(distanceThroughU < v.minDistance)); if (distanceThroughU < v.minDistance) { vertexQueue.remove(v); v.minDistance = distanceThroughU; v.previous = u; vertexQueue.add(v); Log.e(TAG, "vertequeue size "+vertexQueue.size()); } } } } public static List<Node> getShortestPathTo(Node target) { List<Node> path = new ArrayList<Node>(); for (Node vertex = target; vertex != null; vertex = vertex.previous) path.add(vertex); Collections.reverse(path); return path; } }