【问题标题】:Igraph (C) returns bad vertex idsIgraph (C) 返回错误的顶点 ID
【发布时间】:2015-02-17 03:04:41
【问题描述】:

我正在尝试以 gml 格式加载一个简单的图形(如果需要,我可以上传它)并计算它的邻接列表并为每个顶点打印它。

这是我正在做的事情:

int
main(int argc, char *argv[])
{

    igraph_t g;
    igraph_adjlist_t adjlist;
    int num_edges, num_vertices;

    FILE *ifile;
    ifile = fopen("example.gml", "r");
    igraph_read_graph_gml(&g, ifile);
    fclose(ifile);

    n_vertices = igraph_vcount(&g);

    cout << "vertices: " << n_vertices << endl;

    igraph_adjlist_init(&g, &adjlist, IGRAPH_OUT);
    igraph_vector_t *vect_adj;

    for (int n = 0; n < n_vertices; n++)
    {
        igraph_vs_t adc;
        igraph_vs_adj(&adc, n, IGRAPH_OUT);
        cout << "TYPE " << igraph_vs_type(&adc) << "\n";

        vect_adj = (igraph_vector_t *)igraph_adjlist_get(&adjlist, n);

        printf("\nvertex %d n adjs %ld\n", n, igraph_vector_size(vect_adj));
        for (int f = 0; f < igraph_vector_size(vect_adj); f++)
        {
            cout << "node id " << (long int)igraph_vector_e(vect_adj, f) << endl;
            long int neighbor = VECTOR(*vect_adj)[f];
            cout << "nid " << neighbor << endl;
        }
    }

    igraph_destroy(&g);

}

但是发生的情况是,我总是得到 0 作为 id,就好像有一些类型转换问题一样。我在这里做错了什么?

【问题讨论】:

    标签: c++ c graph igraph


    【解决方案1】:

    我想这里的重点是使用像 igraph_vector_int_t 这样的类型化向量和类型化函数 igraph_vector_int_size

    【讨论】:

    • 没错。 igraph_get_adjlist 返回指向 igraph_vector_int_t 的指针。 igraph.org/c/doc/ch07.html#igraph_adjlist_get 顺便说一句。我还建议将 R/Python 与 igraph 结合使用,它的效率提高了 100 倍。 (当然,除非你真的需要用 C/C++ 来做你的事情。)
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2019-03-28
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多