示例#1
0
    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;
            }
        }
    }
示例#2
0
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);
		}		
	}
}
示例#3
0
 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 );
 	}*/
 }