igraph(c)对邻接列表的每个元素的访问

igraph (c) access to each element of adjacency list

本文关键字:元素 访问 列表 igraph      更新时间:2023-10-16

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

#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中的相邻列表记录在这里:

  • https://igraph.org/c/doc/ch07.html#igraph-调整列表

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

因此,只需使用

igraph_adjlist_get(adjlist, vertex)

以得到CCD_ 3的邻居列表作为CCD_。

如果希望使用关联边而不是相邻顶点,请创建关联列表而不是邻接列表。

示例:

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);