在C中的iGraph图中删除最大度数的顶点

时间:2016-03-30 22:07:57

标签: c igraph

我想使用C&#39的iGraph库在图表中删除一个随机选择的最大度顶点。这是我的代码:

#include <stdio.h>
#include <igraph/igraph.h>

int main() {

    float dens = .12;
    int nbr_nodes = 100;
    igraph_integer_t mdeg;
    igraph_vector_t degree;
    igraph_t g;

    igraph_rng_seed(igraph_rng_default(), 400);
    igraph_erdos_renyi_game(&g, IGRAPH_ERDOS_RENYI_GNP, nbr_nodes, dens,IGRAPH_UNDIRECTED, IGRAPH_NO_LOOPS);

    igraph_vector_init(&degree,0);
    igraph_degree(&g, &degree, igraph_vss_all(), IGRAPH_ALL, IGRAPH_NO_LOOPS);

    igraph_maxdegree(&g, &mdeg, igraph_vss_all(), IGRAPH_ALL, IGRAPH_NO_LOOPS);

    igraph_delete_vertices(&g, ???);

    return 0;
}

我可以通过以下方式找到最大学位:

igraph_maxdegree(&g, &mdeg, igraph_vss_all(), IGRAPH_ALL, IGRAPH_NO_LOOPS);

但我不确定如何找到与其中一个最大度点顶点对应的ID。

简而言之,我不确定要放什么而不是???在:

igraph_delete_vertices(&g, ???);

谢谢!任何线索都表示赞赏!

1 个答案:

答案 0 :(得分:1)

可能有多个顶点的度数等于最大度数,因此您必须使用igraph_degree()查询所有度数(就像您一样),找到向量中等于最大值的项目您之前从igraph_maxdegree()获得,将这些项的索引收集到一个向量中,然后将其传递给igraph_delete_vertices(),并将其包含在igraph_vs_t中。类似的东西:

igraph_vector_t indices;
long int i;
igraph_integer_t vcount = igraph_vcount(&graph);

igraph_vector_init(&indices, 0);
for (i = 0; i < vcount; i++) {
    if (VECTOR(degree)[i] == mdeg) {
        igraph_vector_push_back(&indices, i);
    }
}

igraph_delete_vertices(&g, igraph_vss_vector(&indices));