我想使用C的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, ???);


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

最佳答案

可能有多个顶点,其度数等于最大度数,因此您必须使用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));

关于c - 删除C中iGraph图中最大度数的顶点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36320610/

10-10 12:50