#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对象 |
||||
|
产生随机图的值的类型
|
||||
|
途中的顶点数目 |
||||
|
GNM中m的值或者GNP中p的值 |
||||
|
逻辑值,是否产生有向图 |
||||
|
逻辑值,是否产生自循环的图 |
diameter(graph, directed = TRUE, unconnected = TRUE, weights = NULL)图的直径是图中最长的那根线
参数解析
graph |
要进行分析的图 |
directed |
逻辑值,要考虑的是有向图还是无向图,但缺省值是无向图 |
unconnected |
逻辑值,如果图是一个非连接的图那应该如何,如果是FALSE,则会返回一个比最长的直径更长的值,通常是顶点数,如果是TRUE,在已连接的几个组件的直径之间选择一个最长的最为返回值, |
weights |
计算加权距离的可选正权向量,如果图的边具有权属性,则在默认情况下将被使用 |