【发布时间】:2019-06-14 12:23:51
【问题描述】:
我想访问 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
...
再读一遍,但我正在寻找一种更简洁的方式。
感谢您的指导。
【问题讨论】:
-
“更清洁的方式”是什么意思? API
igraph_write_graph_edgelist看起来非常简单明了。 -
我必须将 adjlist 写入文件并再次读取它才能访问边缘。我正在寻找一种将 adjlist 转换为二维向量或数组的方法。现在我无法访问例如 adjlist[0][0]。
-
您可以尝试使用
igraph_write_graph_edgelist()写入文件,然后查看其内容吗?它可能是一个简单的逗号分隔列表,并且在向量中很容易再次阅读。 -
我做了,它是一个由空格分隔的两列文件。将其读取到向量中很容易,但是对于大文件,我失去了一些性能。
-
嗯,这是可以预见的行为。如果文件大小增加,那么读取操作会花费更多时间。您在多个线程中读取大文件的文件(每个线程读取文件的特定部分)。性能受到什么影响?请在您的问题中更新该代码。