gpt4 book ai didi

在 C/C++ 中创建 "igraph"中的加权无向图

转载 作者:太空狗 更新时间:2023-10-29 15:05:59 24 4
gpt4 key购买 nike

问题:我想使用 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,0,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 https://github.com/igraph/igraph/blob/master/examples/simple/cattributes2.c https://github.com/igraph/igraph/blob/master/examples/simple/cattributes3.c https://github.com/igraph/igraph/blob/master/examples/simple/cattributes4.c

这些示例主要是人为的,因为它们主要用于测试目的,但它们显示了基本用法。

关于在 C/C++ 中创建 "igraph"中的加权无向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15654798/

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