1

既存のグラフに 1 つの頂点を追加した後で、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);
4

1 に答える 1

3

igraph の頂点 ID (およびエッジ ID) は、ゼロから頂点/エッジの数から 1 を引いた数までの整数です。したがって、新しい頂点またはエッジを追加すると、その ID は常に追加の頂点/エッジの数と等しくなります。また、一部のエッジを削除すると、既存のエッジの ID が再配置され、エッジ ID 範囲が再び連続するようになります。同じことが頂点の削除にも当てはまります。一部の頂点を削除すると、削除された頂点が分離されていない限り、エッジ ID も再配置されることに注意してください。

于 2013-04-22T14:42:32.093 に答える