C++使用igraph 3.1 使用igraph编译程序

时间:2022-06-01 19:29:08
#include "stdio.h"
#include "include\igraph.h"
#pragma comment(lib,"igraph.lib")
int main()
{
igraph_integer_t diameter;
igraph_t graph;
igraph_erdos_renyi_game(&graph,IGRAPH_ERDOS_RENYI_GNP,1000,5.0/1000,IGRAPH_UNDIRECTED,IGRAPH_NO_LOOPS);
igraph_diameter(&graph,&diameter,0,0,0,IGRAPH_UNDIRECTED,1);
printf("Diameter of a random graph with average degree 5%d\n",diameter);
igraph_destroy(&graph);
}

本例子程序,说明了一下几点,首先,程序使用igraph库,应该包含"igraph.h"头文件,

第二点,igraph使用igraph_integer_t数据类型代替double类型,

第三点,igraph的igraph对象就是igraph_t数据类型,

第四点igraph_erdos_renyi_game()函数创建了一个graph对象,igraph_destroy则销毁一个igraph对象,同时销毁为graph分配的内存。

要编译这段程序,你需要一个编译器,如果这段程序要被gcc调用,并且这段程序被放在igraph_test.c文件中,那么你需要的编译命令是这样的

gcc igraph_test.c -I/usr/local/igraph -L/usr/local/lib -ligraph -o igraph_test

准确的命令要取决于安装在你系统上的igraph,在-I之后的目录是包含 igraph_test.c文件的目录,-L则应该包含库所在的路径,通常,该库会叫做libigraph.so或者libigraph.a或者

igraph.dll,如果你的系统有pkg-配置,你可能会需要使用接下来的命令设置编译选项

pkg-config --libs --cflags igraph

可执行文件在绝大多数系统上可以通过使用下面的命令来执行

./igraph_test

如果你使用动态链接库,同时igraph库并不在一个默认的位置,你可能会需要设置LD_LIBRARY_PATH变量,使用shell愈发命令,在bash中可能是这个样子的

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/libs/igraph

./igraph_test

这样的语法命令是因为我们假设,库所在的位置是在/home/user/libs/igraph,或者你可以使用LD_PRELOAD变量提前装载igraph库

LD_PRELOAD=/home/user/libs/igraph/libgraph.so ./igraph_test

请记住LD_PRELOAD和LD_LIBRARY_PATH在X-like系统上通常是可用的。在类windows小型的UNIX模拟环境上设置环境变量来包含拥有igraph库文件的文件夹就已足够了,

你可以寻找cygigraph-0.dll或者相似的文件来确定该目录的位置。


函数解析

int igraph_erdos_renyi_game(igraph_t *graph, igraph_erdos_renyi_t type,
igraph_integer_t n, igraph_real_t p_or_m,
igraph_bool_t directed, igraph_bool_t loops);

Arguments: 

graph:

指向未初始化的graph对象

type:

产生随机图的值的类型

IGRAPH_ERDOS_RENYI_GNM

G(n,m) 随机在n个顶点中产生m条线

IGRAPH_ERDOS_RENYI_GNP

G(n,p) graph,在p中产生每个可能的边

n:

途中的顶点数目

p_or_m:

GNM中m的值或者GNP中p的值

directed:

逻辑值,是否产生有向图

loops:

逻辑值,是否产生自循环的图

diameter(graph, directed = TRUE, unconnected = TRUE, weights = NULL)

图的直径是图中最长的那根线

参数解析

graph 

要进行分析的图

directed

逻辑值,要考虑的是有向图还是无向图,但缺省值是无向图

unconnected

逻辑值,如果图是一个非连接的图那应该如何,如果是FALSE,则会返回一个比最长的直径更长的值,通常是顶点数,如果是TRUE,在已连接的几个组件的直径之间选择一个最长的最为返回值,

weights

计算加权距离的可选正权向量,如果图的边具有权属性,则在默认情况下将被使用