测试环境:
windows x64
vs2019
igraph==0.10.5
测试代码:
#include "igraph/igraph.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
igraph_real_t avg_path;
igraph_real_t unconnected_pairs;
igraph_t graph;
igraph_vector_int_t dimvector;
igraph_vector_bool_t periodic; // For periodic boundary specification
igraph_vector_int_t edges;
int i;
// Initialize random seed
srand(100);
// Create a 30x30 lattice graph
igraph_vector_int_init(&dimvector, 2);
VECTOR(dimvector)[0] = 30;
VECTOR(dimvector)[1] = 30;
// Initialize periodic boundaries (non-periodic in this case)
igraph_vector_bool_init(&periodic, 2);
VECTOR(periodic)[0] = 0; // Not periodic in first dimension
VECTOR(periodic)[1] = 0; // Not periodic in second dimension
igraph_square_lattice(&graph, &dimvector, 0, IGRAPH_UNDIRECTED, 0, &periodic);
// Calculate average path length
igraph_average_path_length(&graph, &avg_path, &unconnected_pairs,
IGRAPH_UNDIRECTED, 1);
printf("Average path length (lattice): %f\n", (double)avg_path);
// Initialize edge vector for random edges
igraph_vector_int_init(&edges, 20);
for (i = 0; i < igraph_vector_int_size(&edges); i++) {
VECTOR(edges)[i] = rand() % igraph_vcount(&graph);
}
// Add random edges
igraph_add_edges(&graph, &edges, 0);
// Recalculate average path length
igraph_average_path_length(&graph, &avg_path, &unconnected_pairs,
IGRAPH_UNDIRECTED, 1);
printf("Average path length (randomized lattice): %f\n", (double)avg_path);
// Clean up
igraph_vector_int_destroy(&dimvector);
igraph_vector_bool_destroy(&periodic);
igraph_vector_int_destroy(&edges);
igraph_destroy(&graph);
getchar();
return 0;
}
代码解读:
这段C++代码使用igraph图计算库实现了一个网络分析实验,主要功能是:
应用场景: 这是典型的复杂网络分析实验,用于研究:
输出结果可以直观展示:即使添加很少的随机边,也能大幅降低规则网格的平均路径长度。最后的getchar()是为了在Windows环境下保持控制台窗口不立即关闭。
运行结果: