void GraphRandomGenerator::initExactGraph(int iEdges) { for(int i=0; i<iEdges; ++i) { int a,b; do { getRandomEdge(a,b); }while(!_graph.addEdge(a,b)); } }
void GreedyHeuristic::getGreedyTree(UndirectedGraph* greedyTree,int cardinality) { Edge* startE = getRandomEdge(); greedyTree->addVertex(startE->fromVertex()); greedyTree->addVertex(startE->toVertex()); greedyTree->addEdge(startE); generateNeighborhoodFor(startE); for (int k = 1; k < cardinality; k++) { Edge* kctn = getMinNeighbor(); Vertex* nn = determineNeighborNode(kctn,greedyTree); greedyTree->addVertex(nn); greedyTree->addEdge(kctn); adaptNeighborhoodFor(kctn,nn,greedyTree); } greedyTree->setWeight(weightOfSolution(greedyTree)); }
void GraphRandomGenerator::initProbGraph(int iEdges) { double p = 2.0*(double)iEdges/(double)((_graph.getVertexSize()-1)*_graph.getVertexSize()); for (int i=0; i<_graph.getVertexSize(); ++i) { for (int j=0; j<_graph.getVertexSize(); ++j) { if (rand()<p*RAND_MAX) { int a,b; do { getRandomEdge(a,b); }while(!_graph.addEdge(a,b)); } } } }