PrimGraphMstImplementation(const Graph& graph) : graph(graph), summaryWeight(0) // we do all the work here in constructor // we assume that graph is connected { assert(graph.verticesCount() > 0); visitVertex(0); while(!pq.empty() && visited.size() < graph.verticesCount()) { EdgeWithPriority element = pq.top(); pq.pop(); if(visited.find(element.key.first) == visited.end()) { edges.push_back(element.key); summaryWeight += element.weight; visitVertex(element.key.first); } else if (visited.find(element.key.second) == visited.end()) { edges.push_back(element.key); summaryWeight += element.weight; visitVertex(element.key.second); } else { continue; } } }
LazyPrimMST::LazyPrimMST(const EWGraph& graph) : weight(0.0), graph(graph), marked(graph.getVertexCount(), false) { visitVertex(0); while (!minPQ.empty()) { Edge curEdge = minPQ.top(); minPQ.pop(); int v = curEdge.either(); int w = curEdge.other(v); if (!marked[v] || !marked[w]) { MSTEdges.push_back(curEdge); weight += curEdge.getWeight(); if (!marked[v]) visitVertex(v); if (!marked[w]) visitVertex(w); } } }
void examine_edge(Edge e, const Graph& /*g*/) { if ( useEdgeName() ) { vgd::graph::detail::EdgeName edgeName = getEdgeName(e); visitVertex( edgeName.enable() ); } /*else do nothing, because it is done once in initialize(). { visitVertex( true ); }*/ }