本文整理汇总了C++中ListGraph::nodeFromId方法的典型用法代码示例。如果您正苦于以下问题:C++ ListGraph::nodeFromId方法的具体用法?C++ ListGraph::nodeFromId怎么用?C++ ListGraph::nodeFromId使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ListGraph
的用法示例。
在下文中一共展示了ListGraph::nodeFromId方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main( void ){
Timer T(true);
int final_nodes_num, edge_addition_num;
final_nodes_num = 30000;
edge_addition_num = 7;
ListGraph mGr;
lemon::Random mRandom;
mRandom.seedFromTime();
vector<int> nodeChoice;
set<int> mRndNodes;
vector<int> targets(edge_addition_num, -1);
int currentIndex = 0;
// First targets are all nodes
for(auto &v : targets){
v = currentIndex++;
mGr.addNode();
}
while (countNodes(mGr)<final_nodes_num ) {
// Add new node and connect to targets
currentIndex = mGr.id( mGr.addNode() );
for(const auto &v : targets ){
mGr.addEdge( mGr.nodeFromId( currentIndex ), mGr.nodeFromId( v ) );
}
// Add the nodes, which were connented again
nodeChoice.insert(nodeChoice.end(), targets.begin(), targets.end() );
nodeChoice.insert(nodeChoice.end(), edge_addition_num, currentIndex);
mRndNodes.clear();
while (mRndNodes.size() < edge_addition_num) {
mRndNodes.insert( nodeChoice[ mRandom.integer( nodeChoice.size() ) ] );
}
targets.clear();
targets.insert(targets.begin(), mRndNodes.begin(), mRndNodes.end() );
}
cout << "time: " << T.realTime() << endl;
cout << countNodes( mGr) << endl;
cout << countEdges( mGr) << endl;
graphWriter( mGr, "/Users/sonneundasche/Documents/FLI/DATA/05 LEMON Graphs/BaraBasiTEST.txt")
.run();
InDegMap<ListGraph> inDeg(mGr);
graphWriter( mGr, "/Users/sonneundasche/Documents/FLI/DATA/05 LEMON Graphs/BaraBasi_Degree_TEST.txt")
.nodeMap("degree", inDeg)
.skipEdges()
.run();
}
示例2: main
int main( void ){
Timer T(true);
int init_nodes_num, final_nodes_num, edge_addition_num;
init_nodes_num = 10;
final_nodes_num = 50;
edge_addition_num = 7;
typedef ListEdgeSet< ListGraph > EdgeSet;
ListGraph mListGraph;
EdgeSet mNewEdges( mListGraph );
FullGraph fg(init_nodes_num);
GraphCopy<FullGraph, ListGraph> cg( fg, mListGraph); // Create the seed nodes
cg.run();
int mNumEdges = countEdges( mListGraph );
EdgeSet::Edge e;
lemon::Random mRandom;
mRandom.seedFromTime();
ListGraph::Node newNode, randNode;
// new edges will be saved seperatly in an EdgeSet, not to change the original node degrees
for ( int i = init_nodes_num; i < final_nodes_num; i++){
mNumEdges = countEdges( mListGraph );
mNewEdges.clear();
newNode = mListGraph.addNode();
while ( countEdges( mNewEdges ) != edge_addition_num ) {
randNode = mListGraph.nodeFromId( mRandom[ mListGraph.maxNodeId() ] ) ;
// --- CALCULATE THE PROBABILITY
if ( mRandom.real() < (( (double)(countIncEdges(mListGraph, randNode)) / (double)( 2*mNumEdges ) )) ){
if ( findEdge( mNewEdges, newNode, randNode ) == INVALID){ // does the edge already exist?
mNewEdges.addEdge( newNode, randNode );
}
}
}
// Create the new edges in the original graph
for (EdgeSet::EdgeIt e( mNewEdges ); e!=INVALID; ++e){
mListGraph.addEdge( mNewEdges.u( e ), mNewEdges.v(e) );
}
}
cout << T.realTime() << endl;
cout << countEdges( mListGraph) << endl;
cout << countEdges( fg ) << endl;
}
示例3: brach_and_bound999999
// ATENÇÃO: Não modifique a assinatura deste método.
bool brach_and_bound999999(TSP_Data_R &tsp, const vector<DNode> &terminais, const vector<DNode> &postos,
const DNode source,
int delta, int maxTime, vector<DNode> &sol, double &lbound){
// Converte o TSP direcionado para um nao direcionado com duas arestas
ListGraph graph;
EdgeValueMap weights(graph);
// Adiciona os nos
for (ListDigraph::NodeIt u(tsp.g); u!=INVALID; ++u)
{
Node v = graph.addNode();
}
// Adiciona as arestas
for (ListDigraph::ArcIt ait(tsp.g); ait!=INVALID; ++ait)
{
// pega os dois nos incidentes
Arc a(ait);
DNode u = tsp.g.source(a);
DNode v = tsp.g.target(a);
// cria a mesma aresta no grafo não direcionado
Node gu = graph.nodeFromId(tsp.g.id(u));
Node gv = graph.nodeFromId(tsp.g.id(v));
// insere a aresta no grafo nao direcionado
Edge e = graph.addEdge(gu, gv);
// Atribui pesos as arestas
weights[e] = tsp.weight[a];
}
NodeStringMap nodename(graph);
NodePosMap posicaox(graph);
NodePosMap posicaoy(graph);
TSP_Data utsp(graph, nodename, posicaox, posicaoy, weights);
// utiliza o convertido
ListGraph::EdgeMap<GRBVar> x(graph);
GRBEnv env = GRBEnv();
GRBModel model = GRBModel(env);
// TODO: [Opcional] Comente a linha abaixo caso não queira inserir cortes durante a execução do B&B
model.getEnv().set(GRB_IntParam_LazyConstraints, 1);
model.getEnv().set(GRB_IntParam_Seed, 0);
model.set(GRB_StringAttr_ModelName, "TSPR - TSP with Refueling"); // name to the problem
model.set(GRB_IntAttr_ModelSense, GRB_MINIMIZE); // is a minimization problem
// Add one binary variable for each arc and also sets its cost in the objective function
for (EdgeIt e(utsp.g); e!=INVALID; ++e) {
char name[100];
Edge edge(e);
unsigned uid = utsp.g.id(utsp.g.u(edge));
unsigned vid = utsp.g.id(utsp.g.v(edge));
sprintf(name,"x_%s_%s",tsp.vname[tsp.g.nodeFromId(uid)].c_str(),tsp.vname[tsp.g.nodeFromId(vid)].c_str());
x[e] = model.addVar(0.0, 1.0, utsp.weight[e],GRB_BINARY,name);
}
model.update(); // run update to use model inserted variables
// converte os terminais e os postos
vector<Node> uterminais;
for (auto t : terminais)
{
unsigned tid = tsp.g.id(t);
uterminais.push_back(utsp.g.nodeFromId(tid));
}
NodeBoolMap upostos(utsp.g, false);
for (auto p: postos)
{
unsigned pid = tsp.g.id(p);
// upostos.push_back(utsp.g.nodeFromId(pid));
upostos[utsp.g.nodeFromId(pid)] = true;
}
// Adicione restrições abaixo
// (1) Nós terminais devem ser visitados exatamente uma vez
for (auto v : uterminais) {
GRBLinExpr expr = 0;
for (IncEdgeIt e(utsp.g,v); e!=INVALID; ++e){
expr += x[e];
}
model.addConstr(expr == 2 );
}
// (3) Nó source sempre presente no início do caminho
Node usource = utsp.g.nodeFromId(tsp.g.id(source));
GRBLinExpr expr = 0;
for (IncEdgeIt e(utsp.g,usource); e!=INVALID; ++e){
expr += x[e];
}
model.addConstr(expr >= 1 );
try {
//.........这里部分代码省略.........