本文整理汇总了C++中graph_type::add_edge方法的典型用法代码示例。如果您正苦于以下问题:C++ graph_type::add_edge方法的具体用法?C++ graph_type::add_edge怎么用?C++ graph_type::add_edge使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类graph_type
的用法示例。
在下文中一共展示了graph_type::add_edge方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: edge_loader
/////////////////////////////////////////////////////////////////////////
// Edge Loader (used to read the adjacency list and add edges to the graph)
bool edge_loader(graph_type& graph, const std::string& fname,
const std::string& textline)
{
if ( textline.length() == 0 || textline[0] == '#' )
return true; // empty or comment line, return
std::stringstream strm(textline);
graphlab::vertex_id_type vid;
// first entry in the line is a vertex ID
strm >> vid;
if (opts.verbose > 0)
logstream(LOG_EMPH) << "Here's the input: "
<< textline << "\n"
<< vid << "\n";
// Line should contain at least 1 more number (degree of node)
if (!strm.good())
{
logstream(LOG_ERROR) << "The following ajacency list line is incomplete(check adj_list standard):\n"
<< textline << std::endl;
return EXIT_FAILURE;
}
// second entry is the out-degree
int outdeg;
strm >> outdeg;
graphlab::vertex_id_type other_vid;
for (int i=0; i!=outdeg; ++i)
{
// Line should contain more numbers (id of neighbours)
if (!strm.good())
{
logstream(LOG_ERROR) << "The following ajacency list line is incomplete(check adj_list standard):\n"
<< textline << std::endl;
return EXIT_FAILURE;
}
strm >> other_vid;
// only add edges in one direction
if (other_vid < vid)
continue;
if (opts.verbose > 0)
logstream(LOG_EMPH) << "Adding edge: (" << vid << "," << other_vid << ")\n";
edge_data edata; edata.empty = false;
graph.add_edge(vid,other_vid,edata);
}
return true;
}
示例2: parse_edge_line
bool parse_edge_line(graph_type &graph, const std::string &file, const std::string &line) {
if (line.empty() || line[0] == '#') {
return true;
}
char *dst;
size_t source = strtoul(line.c_str(), &dst, 10);
if (dst == line.c_str()) return false;
char *end;
size_t target = strtoul(dst, &end, 10);
if (dst == end) return false;
if (source != target) graph.add_edge(source, target);
return true;
}
示例3: line_parser
bool line_parser(graph_type& graph, const std::string& filename,
const std::string& textline)
{
std::istringstream ssin(textline);
graphlab::vertex_id_type vid;
ssin >> vid;
int out_nb;
ssin >> out_nb;
if (out_nb == 0)
graph.add_vertex(vid);
while (out_nb--) {
graphlab::vertex_id_type other_vid;
ssin >> other_vid;
graph.add_edge(vid, other_vid);
}
return true;
}
示例4: loadUAIfile
//.........这里部分代码省略.........
factor_memb[i].resize(temp1);
for (int j=0; j!=temp1; ++j)
{
in >> temp2;
factor_memb[i][j] = temp2;
}
//CHECK(in.good(), "Could not finish reading cardinalities. Are you sure this is a typeUAI energy file?");
CHECK(in.good());
}
if (opts.verbose > 0)
cout
<< "Finished Reading UAI-Preamble:"
<< " #Nodes = " << nnodes
<< ", #Factors = "<< nfactors
<< ", Average Cardinality = " << double(sum_of_cardinalities)/nfactors
<< "\n";
// Now read factor potentials
for (int i=0; i!=nfactors; ++i)
{
int cardprod; double potential_value; //, energy;
in >> cardprod;
vertex_data vdata;
vdata.nvars = factor_size[i];
if (vdata.nvars > 1) {
vdata.degree = vdata.nvars; // Factor degree.
}
vdata.cards.resize(factor_size[i]);
vdata.neighbors.resize(factor_size[i]);
vector<edge_data> edata(factor_size[i]);
int cardprod2 = 1;
for (int j=0; j!=factor_size[i]; ++j)
{
vdata.cards[j] = cardinalities[factor_memb[i][j]];
vdata.neighbors[j] = factor_memb[i][j]; // afm (check if this was intended!)
cardprod2 *= vdata.cards[j];
// Also create edge structs here
if (factor_size[i]>1)
{
edata[j].varid = factor_memb[i][j];
edata[j].card = cardinalities[edata[j].varid];
edata[j].multiplier_messages.setZero(edata[j].card);
edata[j].local_messages.setZero(edata[j].card);
}
}
//CHECK_EQ(cardprod, cardprod2, "Incorrectly sized factor");
CHECK_EQ(cardprod, cardprod2);
// Read factor potentials
vdata.potentials.resize(cardprod);
for (int k = 0; k != cardprod; ++k)
{
in >> potential_value;
//energy = Potential2Energy(potential_value);
vdata.potentials[k] = log10(potential_value);
}
//CHECK(in.good(), "Could not finish reading factor tables. Are you sure this is a typeUAI energy file?");
CHECK(in.good());
// allocate factors evenly to different machines.
if (i%dc.numprocs() != dc.procid())
continue;
// If all is well, add vertex and edges
graph.add_vertex(i,vdata);
if (factor_size[i] > 1) // if not a unary, add edges to unaries
for (int j=0; j!=factor_size[i]; ++j)
graph.add_edge(i,edata[j].varid,edata[j]);
if (opts.verbose > 1)
{
cout << "Machine #" << dc.procid() << ", Vertex Id = " << i
<< " with " << vdata.nvars << " variables.";
if (factor_size[i] > 1)
{
cout << ", Edges = ";
for (int j=0; j!=factor_size[i]; ++j)
cout << ", (" << i << "," << edata[j].varid << ")";
}
cout << "\n";
cout << "potential: " << vdata.potentials << "\n";
}
} // End of reading factors
dc.barrier();
} // end of loading UAI file
示例5: graph_loader
bool graph_loader(graphlab::distributed_control& dc, graph_type& graph, string img_dir)
{
// force a "/" at the end of the path
// make sure to check that the path is non-empty. (you do not
// want to make the empty path "" the root path "/" )
string path = img_dir;
if (path.length() > 0 && path[path.length() - 1] != '/') path = path + "/";
vector<string> graph_files;
string search_prefix;
graphlab::fs_util::list_files_with_prefix(path, search_prefix, graph_files);
if (graph_files.size() == 0)
logstream(LOG_WARNING) << "No files found in " << path << std::endl;
if (opts.verbose > 2)
logstream(LOG_EMPH)
<< "Total number of images: " << graph_files.size() << "\n";
// vertex data & id
graphlab::vertex_id_type vid(-1);
graphlab::vertex_id_type other_vid;
///////////////////////////////////////////////////////
// Loop over files
for(size_t i = 0; i < graph_files.size(); ++i)
{
// Each machine loads corresponding file
if (i % dc.numprocs() == dc.procid())
{
if (opts.verbose > 0)
logstream(LOG_EMPH)
<< "Process: " << dc.procid() << "/" << dc.numprocs() << " "
<< "picked image: " << graph_files[i] << "\n";
vid = i;
vertex_data vdata;
vdata.empty = false;
vdata.img_path = graph_files[i];
vdata.features.img_idx = i;
graph.add_vertex(vid, vdata);
if (opts.verbose > 2)
logstream(LOG_EMPH)
<< "Vertex " << i << " Image: " << vdata.img_path << "\n";
}
}
// Adding edges between every pair of vertices to create a fully connected graph
// no duplicate edges are added
for(size_t i = 0; i < graph_files.size()-1; ++i)
{
vid = i;
for(size_t j = i+1; j < graph_files.size(); ++j)
{
other_vid = j;
if (opts.verbose > 0)
logstream(LOG_EMPH) << "Adding edge: (" << vid << "," << other_vid << ")\n";
edge_data edata; edata.empty = false;
graph.add_edge(vid,other_vid,edata);
}
}
return true;
}
示例6: loadUAIfile
//.........这里部分代码省略.........
{
int cardprod; double potential_value; //, energy;
in >> cardprod;
vertex_data vdata;
vdata.nvars = factor_size[i];
if (vdata.nvars > 1) {
vdata.degree = vdata.nvars; // Factor degree.
vdata.factor_type = DENSE;
}
else {
vdata.degree = 1; // Factor degree.
vdata.factor_type = XOR;
}
vdata.cards.resize(factor_size[i]);
vdata.neighbors.resize(factor_size[i]);
vector<edge_data> edata(factor_size[i]);
vector<int> varid(factor_size[i]);
vector<int> card(factor_size[i]);
int cardprod2 = 1;
for (int j=0; j!=factor_size[i]; ++j)
{
vdata.cards[j] = cardinalities[factor_memb[i][j]];
vdata.neighbors[j] = factor_memb[i][j]; // afm (check if this was intended!)
cardprod2 *= vdata.cards[j];
// Also create edge structs here
//if (factor_size[i]>1)
// {
varid[j] = factor_memb[i][j];
card[j] = cardinalities[varid[j]];
edata[j].multiplier_messages.setZero(card[j]);
edata[j].local_messages.setZero(card[j]);
edata[j].potentials.setZero(card[j]);
// }
}
//CHECK_EQ(cardprod, cardprod2, "Incorrectly sized factor");
CHECK_EQ(cardprod, cardprod2);
// Read factor potentials
vdata.potentials.resize(cardprod);
vdata.beliefs.resize(cardprod);
int x_offset = 0;
for(int x=0; x< vdata.nvars; x++){
for(int y=0; y<vdata.cards[x]; y++){
vdata.beliefs[x_offset+y] = 1.0/vdata.cards[x];
}
x_offset += vdata.cards[x];
}
vdata.factor_beliefs.setConstant(cardprod, 1.0/cardprod);
for (int k = 0; k != cardprod; ++k)
{
in >> potential_value;
//energy = Potential2Energy(potential_value);
vdata.potentials[k] = log10(potential_value) ;
}
//CHECK(in.good(), "Could not finish reading factor tables. Are you sure this is a typeUAI energy file?");
CHECK(in.good());
vdata.potentials.maxCoeff(&vdata.best_configuration);
// allocate factors evenly to different machines.
if (i%dc.numprocs() != dc.procid())
continue;
// If all is well, add vertex and edge
graph.add_vertex(vid ,vdata);
if (factor_size[i] > 1 || opts.algorithm > 0) // if not a unary, add edges to unaries
for (int j=0; j!=factor_size[i]; ++j)
graph.add_edge(vid,varid[j],edata[j]);
//after adding everything increment vertex id
vid++;
if (opts.verbose > 1)
{
cout << "Machine #" << dc.procid() << ", Vertex Id = " << i
<< " with " << vdata.nvars << " variables.";
if (factor_size[i] > 1)
{
cout << ", Edges = ";
for (int j=0; j!=factor_size[i]; ++j)
cout << ", (" << i << "," << varid[j] << ")";
}
cout << "\n";
cout << "potential: " << vdata.potentials << "\n";
}
} // End of reading factors
dc.barrier();
} // end of loading UAI file