Dijkstra's Algorithm
public void dijkstra( Vertex s ) {
for ( Vertex v : vertices ) {
v.visited = false;
v.cost = 999999; }
s.cost = 0;
s.parent = null;
PriorityQueue<Vertex>
fringe = new PriorityQueue<Vertex>(20,
new Comparator<Vertex>() {
public int compare(Vertex i, Vertex j) {
return (i.cost - j.cost); }});
fringe.add(s);
while ( ! fringe.isEmpty() ) {
Vertex v = fringe.remove(); // lowest-cost
if ( ! v.visited )
{ v.visited = true;
for ( Edge e : v.edges )
{ int newcost = v.cost + e.cost;
if ( newcost < e.target.cost )
{ if (e.target.cost < 999999)
fringe.remove(e.target);
e.target.cost = newcost;
e.target.parent = v;
fringe.add(e.target); } } } } }