在C/C++中的“igraph”中创建加权无向图
问题:
我想使用igraph制作存储在.csv文件中的邻接矩阵的加权无向图,然后对其进行最小生成树和其他算法. 我开始制作一个有10个顶点和5个边的有向图.默认情况下,igraph不允许边缘权重,你必须使用一些对我来说没有意义的属性(类似于igraph_i_set_attribute_table). 有人可以帮我解决这个问题. void print_vector(igraph_vector_t *v,FILE *f) { long int i; for (i=0; i<igraph_vector_size(v); i++) { fprintf(f," %li",(long int) VECTOR(*v)[i]); } fprintf(f,"n"); } int main(int argc,char* argv[]) { igraph_t g; igraph_vector_t v; int ret; igraph_es_t es; /* Initialize the vector for edges */ igraph_vector_init(&v,10); VECTOR(v)[0]=0;VECTOR(v)[1]=1; VECTOR(v)[2]=1;VECTOR(v)[3]=3; VECTOR(v)[4]=1;VECTOR(v)[5]=5; VECTOR(v)[6]=2;VECTOR(v)[7]=3; VECTOR(v)[8]=2;VECTOR(v)[9]=5; igraph_create(&g,&v,IGRAPH_DIRECTED); print_vector(&v,stdout); /* igraph_i_set_attribute_table(&igraph_cattribute_table); */ igraph_vector_destroy(&v); igraph_destroy(&g); return 0; } 解决方法
首先,一般来说,使用R或Python中的igraph要好得多,属性得到更好的支持.例如,您可以根据属性值等轻松选择顶点或边缘.在C中,对属性的支持是最小的,并且在使用它们时,您大多数都是自己的.所以,除非你真的需要C,我建议使用R或Python.
如果您仍然想要C,那么首先要记住的是您需要包含 igraph_i_set_attribute_table(&igraph_cattribute_table); 在您明确或隐式地使用属性执行任何操作之前的代码中. IE浏览器.即使你没有明确地操纵属性,但是创建一个可能具有某些属性的图形,例如.读取图形GraphML文件,之前需要此调用,否则将删除属性.最好在main()函数的开头包含调用. 你不得不使用任何属性,我不确定你的意思. 至于设置和查询属性,请参阅examples / simple目录中的文件: https://github.com/igraph/igraph/blob/master/examples/simple/cattributes.c 这些示例在很大程度上是人为的,因为它们主要用于测试目的,但它们显示了基本用法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |