【问题标题】:How to get igraph vertex id after adding vertex using igraph_add_vertices in c++如何在c ++中使用igraph_add_vertices添加顶点后获取igraph顶点id
【发布时间】:2013-04-15 10:55:29
【问题描述】:

在将单个顶点添加到现有图形后,我想获取 VID(顶点 ID)。在添加新顶点并循环到顶点集的末尾后,我当前得到一个 vertex_set(假设这始终是最后添加的顶点,即使在较早的顶点被删除的情况下?)。我需要测试从集合中间删除一个顶点是否仍然会改变 VID。但我确信一定有更好的(阅读更有效的方式)来做这件事。下面的代码是我目前使用的。

由于我是 iGraph 的新手,因此感谢任何帮助。

// add into graph
igraph_integer_t t = 1;
if(igraph_add_vertices(user_graph, t, 0) != 0)
{
    ::MessageBoxW(NULL, L"Failed to add vertex to iGraph, vertex not added.", L"Network Model", MB_ICONSTOP);
    return false;
}

/* get all verticies */
igraph_vs_t vertex_set;
igraph_vit_t vit;
igraph_integer_t vid = 0;

igraph_vs_all(&vertex_set);
igraph_vit_create(user_graph, vertex_set, &vit);


// must be a better way - look for starting from end.
while (!IGRAPH_VIT_END(vit)) 
{
    vid = IGRAPH_VIT_GET(vit);
    IGRAPH_VIT_NEXT(vit);
}

// add vid to vertex ca
ca->graphid = (int)vid;

// Add new vertex to local store
vm->CreateVertex(ca);   

// cleanup
igraph_vit_destroy(&vit);
igraph_vs_destroy(&vertex_set);

【问题讨论】:

    标签: c++ igraph vertex


    【解决方案1】:

    igraph 中的顶点 ID(以及边 ID)是从零到顶点/边数减一的整数。因此,如果您添加新的顶点或边,其 ID 将始终等于添加之前的顶点/边数。此外,如果删除一些边,现有边的 ID 将重新排列,以使边 ID 范围再次连续。同样适用于顶点的删除,请注意,删除某些顶点也会重新排列边 ID,除非删除的顶点是孤立的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多