Boost Graph Library 库小结1

本文详细介绍Boost Graph Library(BGL)的使用方法,包括图的创建、迭代器的应用及图算法的实现。通过实例演示如何利用BGL进行图的表示与操作,适合初学者快速上手。
部署运行你感兴趣的模型镜像

Boost Graph Library使用泛型的思想,完整的编写了图中的各类算法。比如广搜,深搜,最短路径等等

1.创建一个图

1.1 图的表示

图可以有邻接矩阵和邻接表来表示,而在BGL中,则使用adjacency_listadjacency_matrix来表示,adjacency_list使用邻接表来存储一个图,而adjacency_matrix使用邻接矩阵来存储,分别适用于点比较稀疏的图和点比较密集的图。使用邻接表时可以使用以下定义:

 

1 typedef adjacency_list<listS, vecS, directedS> file_dep_graph;

 

 

其中listS表示将每个点的出边存储在std::list中,vecS表示将每个顶点存储在std::vector

 

directedS表示该图是有向图。如果文件(file.dat)中有如下格式的输入:

5

1 2

0 3

3 4

2 4

4 3

 

 

第一行表示顶点的个数,接下来几行表示每条边的起始顶点和终止顶点。那么可以结合标准输入输出流,以及adjacency_list来表示一个图。代码如下所示:

 1 std::ifstream file_in(“file.dat”);
2 typedef graph_traits<file_dep_graph>::vertices_size_type size_type;
3 size_type n_vertices;
4 file_in >> n_vertices;
5 std::istream_iterator<std::pair<size_type, size_type> > input_befin(file_in), input_end;
6 file_dep_graph g(input_begin, input_end, n_vertices);
7 //需要对operator >>进行重载
8 namespace std{
9 template <typename T>
10 std::istream& operator >>(std::istream& in, std::pair<T, T>& p){
11 in >> p.first >> p.second;
12 return in;
13 }
14 }

代码中利用adjacency_list将文件中的输入转化为图表示在了内存中。即g,有了图在内存中的表示,那么就可以编写代码,对图进行相关算法的编写。

1.2图中的迭代器

一般来说图中的迭代器主要是邻接迭代器,比如:如果想对某顶点的邻接顶点(即出边的尾顶点)进行迭代访问,那么写如下的代码:

1 graph_traits<file_dep_graph>::adjacency_iterator vi, vi_end;
2 for(tie(vi, vi_end) = adjacent_vertices(u, g); vi != vi_end; ++vi)
3 std::cout<<*vi<<std::endl;

 

 

以上代码表示对u所有的的邻接顶点进行了一次迭代打印。

 

如果想对所有顶点进行遍历可以如下编写代码:

1 graph_traits<file_dep_graph>::vertex_iterator vi, vi_end;
2 for(tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi)
3 std::cout<<*vi<<std::endl;

 

 

vertices返回对顶点的迭代器。其它迭代器可以具体参考BGL的用户手册。








 



转载于:https://www.cnblogs.com/zjfdlut/archive/2012/02/22/2362704.html

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值