gpt4 book ai didi

c++ - igraph (c) 访问邻接表的每个元素

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:44 24 4
gpt4 key购买 nike

我想在 C 中的 igraph 中访问生成图的邻接列表的每个元素(稍后将其放入二维 vector 中)。

#include <igraph.h>
#include <iostream>

int main(void)
{
igraph_t graph;
igraph_rng_seed(igraph_rng_default(), 42);
// generage a random graph
igraph_erdos_renyi_game(&graph, IGRAPH_ERDOS_RENYI_GNP,
1000,
5.0/1000.0,
IGRAPH_UNDIRECTED,
IGRAPH_NO_LOOPS);
// extract the adjacency list
igraph_adjlist_t adjlist;
igraph_adjlist_init(&graph, &adjlist, IGRAPH_ALL);

// print to file ??
// ?? std::cout << adjlist[0][0] << std::endl;

igraph_destroy(&graph);
igraph_adjlist_destroy(&adjlist);
return 0;
}

在上面的简单示例中,我提取了邻接表 [igraph_adjlist.h] .

编辑

可以通过以下方式将 adjlist 写入文件:

int igraph_write_graph_edgelist(const igraph_t *graph, FILE *outstream);

0 36
0 291
0 324
0 724
0 942
1 423
1 681
2 87
...

再读一遍,但我正在寻找一种更简洁的方法。

感谢您的指导。

最佳答案

igraph 中的邻接列表记录在此处:

邻接表只是包含每个顶点的直接邻居的顶点 ID 的 vector 集合。

因此,只需使用

igraph_adjlist_get(adjlist, vertex)

igraph_vector_int_t 的形式获取 vertex 的邻居列表。

如果您想要入射边而不是相邻顶点,请创建一个 incidence list而不是邻接表。

例子:

igraph_inclist_t inclist;

igraph_inclist_init(&graph, &inclist, IGRAPH_ALL);

igraph_vector_int_t *edges = igraph_inclist_get(&il, vertex);
igraph_integer_t first_neighbour = IGRAPH_OTHER(&graph, VECTOR(*edges)[0], vertex);

igraph_inclist_destroy(&inclist);

关于c++ - igraph (c) 访问邻接表的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54284436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com