C++ igraph教程:从数据文件构建图并设置边权重和节点名称
C++ igraph教程:从数据文件构建图并设置边权重和节点名称
本教程将指导您使用C++ igraph库从数据文件构建图。我们将涵盖以下内容:
- 读取包含节点和边信息的数据文件。* 将数据的第一列和第二列分别作为边的source和target。* 创建一个igraph图对象。* 为边设置权重。* 为节点设置名称。* 将图保存到GraphML文件。
代码
以下是完整的C++代码:c++#include <igraph/igraph.h>#include
int main() { std::ifstream file('matrix.txt'); std::string line;
std::vector<int> edges; std::vector<double> weights; std::vector<std::string> node_names;
std::unordered_map<std::string, int> node_map; int node_count = 0;
while (std::getline(file, line)) { std::istringstream iss(line); std::string u, v; double w;
if (!(iss >> u >> v >> w)) { break; // error }
if (node_map.find(u) == node_map.end()) { node_map[u] = node_count; node_names.push_back(u); node_count++; }
if (node_map.find(v) == node_map.end()) { node_map[v] = node_count; node_names.push_back(v); node_count++; }
edges.push_back(node_map[u]); edges.push_back(node_map[v]); weights.push_back(w); }
igraph_t graph; igraph_set_attribute_table(&igraph_cattribute_table); igraph_empty(&graph, node_count, IGRAPH_UNDIRECTED); // 指定顶点数
igraph_vector_int_t edge_vector; igraph_vector_int_init(&edge_vector, 0);
for (size_t i = 0; i < edges.size(); ++i) { igraph_vector_int_push_back(&edge_vector, edges[i]); }
igraph_add_edges(&graph, &edge_vector, 0);
igraph_vector_t weight_vector; igraph_vector_init(&weight_vector, 0);
for (size_t i = 0; i < weights.size(); ++i) { igraph_vector_push_back(&weight_vector, weights[i]); }
igraph_strvector_t attribute_names; igraph_strvector_init(&attribute_names, 0); igraph_strvector_add(&attribute_names, 'weight');
igraph_i_cattribute_add_edges(&graph, 'weight', &weight_vector, &attribute_names);
for (size_t i = 0; i < node_names.size(); ++i) { igraph_strvector_clear(&attribute_names); igraph_strvector_add(&attribute_names, 'name'); igraph_i_cattribute_add_vertices(&graph, 'name', i, i + 1, &attribute_names); }
FILE *outfile = fopen('gg.graphml', 'w'); igraph_write_graph_graphml(&graph, outfile, false); fclose(outfile); igraph_destroy(&graph); igraph_vector_int_destroy(&edge_vector); igraph_vector_destroy(&weight_vector); igraph_strvector_destroy(&attribute_names);
return 0
原文地址: https://www.cveoy.top/t/topic/fxOo 著作权归作者所有。请勿转载和采集!