gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:10:11 27 4
gpt4 key购买 nike

我想使用 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() 查询所有度数(就像您所做的那样),找到 vector 中符合以下条件的项:等于您之前从 igraph_max Degree() 获得的最大值,将这些项目的索引收集到一个 vector 中,然后将其传递给 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com