All pastes #952366 Raw Edit

Stuff

public text v1 · immutable
#952366 ·published 2008-03-22 02:20 UTC
rendered paste body
	while( solution.totalEdges() < graph.totalVertexes() - 1)
	{
		Edge e = graph.selectSmallerEdge();
		
		std::cout << " " << count; 
		std::cout << " {" << e.getFrom().getName() << "," << e.getTo().getName() << "} ";
		
		count++;
		
		// Search inside the vector for both from and to vertexes, if positive, try another.
		std::vector<Graph>::iterator posBegin = free.begin(), posEnd = free.end();
		for( ; posBegin != posEnd; posBegin++)
		{
			if ( (*posBegin).hasVertex(e.getFrom()) 
			&&   (*posBegin).hasVertex(e.getTo()))
			{
				std::cout << "REJECTED" << std::endl;
				graph.removeFirstEdge(); // the Smaller edge is always the first.
				continue;
			}
		}
		
		/*! show on the screen the vectors like {a}, {b,c}, {d} 
			each {} is a vector of vertexes inside a graph. */
		posBegin = free.begin();
		posEnd = free.end();
		for( ; posBegin != posEnd; posBegin++)
		{
			std::vector<Vertex> v = (*posBegin).getVertexList();
			std::vector<Vertex>::iterator iVertexBegin = v.begin(), iVertexEnd = v.end();
			
			std::cout <<"{";
			for(; iVertexBegin != iVertexEnd; iVertexBegin++)
			{
				std::cout<<(*iVertexBegin).getName();
				if (iVertexBegin != (iVertexEnd-1))
				{
					std::cout << ",";
				}
			}
			std::cout <<"}";
		}
		std::cout << std::endl;
		std::cin >> stop;
		
		/*
		* Pega a primeira e a segunda lista de onde estão os grafos para acertar os valores.
		*/
		Graph firstGraph;
		Graph secondGraph;
		
		posBegin = free.begin();
		for( ; posBegin != posEnd; posBegin++)
		{
			if ( (*posBegin).hasVertex(e.getFrom()))
			{
				firstGraph = (*posBegin);
			}
		}
		
		posBegin = free.begin();
		for( ; posBegin != posEnd; posBegin++)
		{
			if ( (*posBegin).hasVertex(e.getTo()))
			{
				secondGraph = (*posBegin);
				break;
			}
		}
				
		// remove All vertexes from the secondGraph and send it to the first one
		std::vector<Vertex> v = secondGraph.getVertexList();
		std::vector<Vertex>::iterator iVertexBegin = v.begin(), iVertexEnd = v.end();
		for(; iVertexBegin != iVertexEnd; iVertexBegin++)
		{
			Vertex vertex = (*iVertexBegin);
			firstGraph.addVertex(vertex);
			secondGraph.rmVertex(vertex);
		}
		// Apava a segunda lista de vertexes usada.
		free.erase(posBegin);
		 
		// Remove da lista do grafo.
		graph.removeFirstEdge();
	}