如何在c ++中使用igraph_add_vertices添加顶点后得到igraph顶点id

时间:2013-04-22 13:49:27

标签: c++ igraph vertex

在将单个顶点添加到现有图形之后,我想获取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);

1 个答案:

答案 0 :(得分:3)

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