【问题标题】:Delete the vertex of maximum degree in a iGraph graph in C在C中删除iGraph图中最大度数的顶点
【发布时间】:2016-04-02 02:54:27
【问题描述】:

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

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

【问题讨论】:

    标签: c igraph


    【解决方案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));
    

    【讨论】:

    • 这太棒了!不过,我的问题应该更清楚。我实际上只需要删除一个最高度数的顶点,随机选择(或度数的有序向量中的第一个)......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多