我想使用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(°ree,0);
igraph_degree(&g, °ree, 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, ???);
谢谢!任何线索都表示赞赏!
答案 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));