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();
}