使用C++ igraph库从数据文件构建图网络

本教程演示如何使用C++ igraph库从数据文件构建图网络。我们将重点介绍以下步骤:

  • 读取包含边信息和权重的数据文件。* 使用igraph库创建图对象。* 将数据文件中的信息转换为igraph图对象的边、节点和属性。* 将生成的图对象保存为GraphML文件。

代码示例

以下是完整的C++代码示例:cpp#include <igraph/igraph.h>#include #include #include #include <unordered_map>#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图对象    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, edges.size());    for (size_t i = 0; i < edges.size(); ++i) {        igraph_vector_int_set(&edge_vector, i, edges[i]);    }    igraph_add_edges(&graph, &edge_vector, 0);

// 添加边权重    igraph_vector_t weight_vector;    igraph_vector_init(&weight_vector, weights.size());    for (size_t i = 0; i < weights.size(); ++i) {        igraph_vector_set(&weight_vector, i, weights[i]);    }    igraph_cattribute_VAN_set(&graph, 'weight', &weight_vector);

// 添加节点名称    igraph_strvector_t names;    igraph_strvector_init(&names, node_names.size());    for (size_t i = 0; i < node_names.size(); ++i) {        igraph_strvector_set(&names, i, node_names[i].c_str());    }    igraph_cattribute_VAS_set(&graph, 'name', &names);

// 将图对象保存为GraphML文件    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(&names);

return 0
使用C++ igraph库从数据文件构建图网络

原文地址: https://www.cveoy.top/t/topic/fxOk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录