【问题标题】:igraph (c) access to each element of adjacency listigraph (c) 访问邻接表的每个元素
【发布时间】: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() 写入文件,然后查看其内容吗?它可能是一个简单的逗号分隔列表,并且在向量中很容易再次阅读。
  • 我做了,它是一个由空格分隔的两列文件。将其读取到向量中很容易,但是对于大文件,我失去了一些性能。
  • 嗯,这是可以预见的行为。如果文件大小增加,那么读取操作会花费更多时间。您在多个线程中读取大文件的文件(每个线程读取文件的特定部分)。性能受到什么影响?请在您的问题中更新该代码。

标签: c++ c igraph


【解决方案1】:

igraph 中的邻接列表记录在这里:

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

因此,只需使用

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

【讨论】:

    猜你喜欢
    • 2014-10-19
    • 2019-01-10
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2014-04-25
    • 1970-01-01
    相关资源
    最近更新 更多