Prim's Algorithm
public void prim( Vertex s ) { for ( Vertex v : vertices ) { v.visited = false; v.parent = null; v.cost = 999999; } s.cost = 0; 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 ) { if ( (! e.target.visited) && ( e.cost < e.target.cost ) ) { e.target.cost = e.cost; e.target.parent = v; fringe.add(e.target); } } } } }