我想使用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(°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, ???);
谢谢!任何线索表示赞赏!
最佳答案
可能有多个顶点,其度数等于最大度数,因此您必须使用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/