图论学习(一)使用Boost Graph Library表示图
来源:互联网 发布:sql server 课程 编辑:程序博客网 时间:2024/05/16 06:04
本文通过使用Boost Graph Library来实现图的新建和遍历。
1.Boost Graph Library库的安装
Boost Graph Library库属于boost库,因此安装boost库就行了。linux系统使用以下命令安装
apt-get install libboost-dev
2.新建图(增加点和边)
新建邻接图使用adjacency_list
#include <boost/graph/adjacency_list.hpp>using namespace boost;int main(){//1.新建无向图,使用邻接矩阵数据结构boost::adjacency_list<listS, vecS, undirectedS> g;//2.增加节点和边方法add_edge(0, 1, g);add_edge(1, 4, g);add_edge(4, 0, g);add_edge(2, 5, g);}
3.遍历顶点
遍历点的思路如下
(1)定义顶点迭代器类型(typedef graph_traits::vertex_iterator vertex_iter;)
(2)创建一个pair容器,容器的数据成员类型为顶点迭代器
(3)调用 vertices(g)函数将指针指向pair。
(4)新建顶点迭代器vi遍历图中的顶点。
#include <iostream> // for std::cout#include <utility> // for std::pair#include <boost/graph/graph_traits.hpp>#include <boost/graph/adjacency_list.hpp>using namespace boost;using namespace std;int main(){ //1.新建无向图,使用邻接矩阵数据结构 typedef adjacency_list<listS, vecS, undirectedS > Graph; Graph g; //2.增加节点和边方法 add_edge(0, 1, g); add_edge(1, 4, g); add_edge(4, 0, g); add_edge(2, 5, g); //3.遍历点 typedef graph_traits<Graph>::vertex_iterator vertex_iter; pair<vertex_iter, vertex_iter> vip; cout << "Vertices in g = [ "; vip = vertices(g); for(vertex_iter vi = vip.first; vi != vip.second; ++vi) { cout << *vi << " "; } cout<<"]"<<endl; return 0;}
4.遍历边
遍历边的思路如下
(1)定义边迭代器类型(typedef graph_traits::vertex_iterator vertex_iter;)
(2)创建一个pair容器,容器的数据成员类型为边迭代器
(3)调用 edges(g)函数将指针指向pair。
(4)新建边迭代器ei遍历图中的顶点。
#include <iostream> // for std::cout#include <utility> // for std::pair#include <boost/graph/graph_traits.hpp>#include <boost/graph/adjacency_list.hpp>using namespace boost;using namespace std;int main(){ //1.新建无向图,使用邻接矩阵数据结构 typedef adjacency_list<listS, vecS, undirectedS > Graph; Graph g; //2.增加节点和边方法 add_edge(0, 1, g); add_edge(1, 4, g); add_edge(4, 0, g); add_edge(2, 5, g); //3.遍历点 typedef graph_traits<Graph>::vertex_iterator vertex_iter; pair<vertex_iter, vertex_iter> vip; cout << "Vertices in g = [ "; vip = vertices(g); for(vertex_iter vi = vip.first; vi != vip.second; ++vi) { cout << *vi << " "; } cout<<"]"<<endl; //4.遍历边方法1 typedef graph_traits<Graph>::edge_iterator edge_iter ; pair<edge_iter, edge_iter> eip; eip=edges(g); cout << "Edge in g = [ "; for(edge_iter ei = eip.first; ei != eip.second; ++ei) { //cout << *ei << " "; cout<<"( source edge="<< source(*ei, g) ; cout<< " taget edge="<<target(*ei, g) <<")"<<endl; } cout<<"]"<<endl; return 0;}
5.常用操作
(1)定义边迭代器
typedef graph_traits::edge_iterator edge_iter ;
(2)获得边的map
property_map
0 0
- 图论学习(一)使用Boost Graph Library表示图
- Boost Graph Library (BGL)学习:使用Bundled Properties
- 使用Boost Graph library
- Boost Graph Library 学习笔记
- 使用boost graph library计算图中点和边的betweenness
- 探索 Boost Graph Library
- 图论学习(二)在Boost Graph中返回连通子图序列
- 使用C++ Boost Graph Library 进行社交网络分析入门篇
- Boost Graph Library 快速入门
- Boost Graph Library 快速入门
- Boost Graph Library 快速入门
- Boost Graph Library 快速入门
- Boost Graph Library 快速入门
- Boost Graph Library 快速入门
- The Boost Graph Library(1)
- (转)Boost Graph Library 快速入门
- Table of Contents: the Boost Graph Library
- 【TensorFlow】计算图graph的使用学习笔记(二)
- SpringMVC与Struts2区别与比较总结
- MTK GPIO
- 【每天半小时】【Python Time】安装Python
- Android直播开源项目
- windows查看端口占用
- 图论学习(一)使用Boost Graph Library表示图
- php文件打包下载
- 《android编程权威指南》RecyclerView的notifyItemChanged()方法使用
- 解决cookie跨域访问
- 前端缓存机制的总结
- MySQL使用
- 使用Maven创建项目报错
- RecyclerView制定位置滑动置顶,并实现头部悬停
- 小程序request接口封装,实现给循环列表添加点击样式