//#pragma warning(disable : 4819)

 #include <boost/config.hpp>
#include <iostream> // for std::cout
#include <boost/graph/adjacency_list.hpp>
using namespace boost; // 构造路由器网络的图模型
template < typename Graph, typename VertexNameMap, typename TransDelayMap >
void build_router_network(Graph & g, VertexNameMap name_map,
TransDelayMap delay_map)
{
//定义5个顶点表示路由器
typename graph_traits < Graph >::vertex_descriptor a, b, c, d, e;
//添加5个顶点到图模型中,并设置顶点的名称属性
a = add_vertex(g);
name_map[a] = 'a';
b = add_vertex(g);
name_map[b] = 'b';
c = add_vertex(g);
name_map[c] = 'c';
d = add_vertex(g);
name_map[d] = 'd';
e = add_vertex(g);
name_map[e] = 'e'; //定义边表示路由器之间的连接
typename graph_traits < Graph >::edge_descriptor ed;
bool inserted;
//添加顶点之间相应连接到图模型中,并设置顶点的名称属性
tie(ed, inserted) = add_edge(a, b, g);
delay_map[ed] = 1.2;
tie(ed, inserted) = add_edge(a, d, g);
delay_map[ed] = 4.5;
tie(ed, inserted) = add_edge(b, d, g);
delay_map[ed] = 1.8;
tie(ed, inserted) = add_edge(c, a, g);
delay_map[ed] = 2.6;
tie(ed, inserted) = add_edge(c, e, g);
delay_map[ed] = 5.2;
tie(ed, inserted) = add_edge(d, c, g);
delay_map[ed] = 0.4;
tie(ed, inserted) = add_edge(d, e, g);
delay_map[ed] = 3.3;
} //打印图中所有顶点的名称属性
template < typename Graph, typename VertexNameMap >
void print_vertex_names(const Graph & g, VertexNameMap name_map)
{
std::cout << "vertices(g) = { ";
typedef typename graph_traits < Graph >::vertex_iterator iter_t;
for (std::pair < iter_t, iter_t > p = vertices(g); p.first != p.second;
++p.first)
//vertices(g)返回顶点迭代器区间,遍历图g的所有顶点
{
print_vertex_name(*p.first, name_map);
std::cout << ' ';
}
std::cout << "}" << std::endl;
} //打印图中所有边的延迟属性
template < typename Graph, typename TransDelayMap, typename VertexNameMap >
void print_trans_delays(const Graph & g, TransDelayMap trans_delay_map,
VertexNameMap name_map)
{
typename graph_traits < Graph >::edge_iterator first, last;
for (tie(first, last) = edges(g); first != last; ++first)
//edges(g)返回边迭代器区间,遍历图g的所有边
{
print_trans_delay(*first, g, trans_delay_map, name_map);
std::cout << std::endl;
}
} //打印一个给定名称属性映射的顶点的名称
//v是图中有效的顶点的描述器
//name_map是名称属性映射
template < typename VertexDescriptor, typename VertexNameMap >
void print_vertex_name(VertexDescriptor v, VertexNameMap name_map)
{
std::cout << get(name_map, v);
} //打印一个给定名称属性映射的顶点和边延迟属性映射的延迟值
//e是图g中有效的边
//name_map是名称属性映射
//delay_map是延迟属性映射
template < typename Graph, typename TransDelayMap, typename VertexNameMap >
void print_trans_delay(typename graph_traits < Graph >::edge_descriptor e,
const Graph & g, TransDelayMap delay_map,
VertexNameMap name_map)
{
std::cout << "trans-delay(" << get(name_map, source(e, g)) << ","
<< get(name_map, target(e, g)) << ") = " << get(delay_map, e);
//source(e,g)和target(e,g)函数分别返回
//图g中e表示的边(u,v)的顶点u和v的描述器
} //测试
void main()
{
//定义图类型graph_t
typedef adjacency_list < listS, listS, directedS,
property < vertex_name_t, char >,
property < edge_weight_t, double > > graph_t; //定义图对象g
graph_t g; //定义属性映射(顶点)name_map并初始化
property_map < graph_t, vertex_name_t >::type name_map =
get(vertex_name, g); //定义属性映射delay_map(边)并初始化
property_map < graph_t, edge_weight_t >::type delay_map =
get(edge_weight, g); //构造路由器网络的图模型g
//注意函数参数为引用传递
build_router_network(g, name_map, delay_map); //打印图g所有顶点的名称属性
print_vertex_names(g, name_map); //打印图g中所有边的延迟属性
print_trans_delays(g, delay_map, name_map); //system("pause"); std::cin.get();
}

22.boost图模板的更多相关文章

  1. 16款值得一用的iPhone线框图模板 (PSD & Sketch)

    在任何网站或移动应用设计的过程中,线框图作为设计元素和功能的图示,它有助于帮助定义和更好地传达信息层次结构,让参与设计和开发的人员更好的理解设计师的思路和设计的功能点. 即使线框图设计是一个比较耗时的 ...

  2. hdu 2987最大权闭合图模板类型题

    /* 最大权闭合图模板类型的题,考验对知识概念的理解. 题意:如今要辞退一部分员工.辞退每个员工能够的到一部分利益(能够是负的),而且辞退员工,必须辞退他的下属.求最大利益和辞退的最小人数. 最大权闭 ...

  3. 《Ext JS模板与组件基本知识框架图----模板》

    最近在整理Ext JS的模板和组件,在参考<Ext JS权威指南>,<Ext JS Web应用程序开发指南>,<Ext JS API>等相关书籍后才写下这篇< ...

  4. C#学习笔记思维导图 一本书22张图

    阅读的书是<21天学通C#>博客中有下载 看看总结之后的模块 全部文件 初步展示 数据存储 继承模块 暂时就这些吧 全部思维导图22张打包下载

  5. 《算法导论》学习总结 — XX.第22章 图的基本算法

    BFS(广搜): 广搜就是广度优先搜索,根据名字可以知道,是通过广度来遍历图,也就是层次遍历吧. 在这里以及下面的DFS(深搜),都用到了颜色WHITE,GRAY,BLACK,不过作用不同,具体分别再 ...

  6. 18.boost 图的拓扑排序

    运行结果: 代码示例: #include <iostream> #include <vector> #include <deque> #include <bo ...

  7. 16.boost图深度优先遍历DFS

    #include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...

  8. Trie图 模板

    trie图实际上是优化的一种AC自动机. trie图是在trie树上加一些失配指针,实际上是类似KMP的一种字符串匹配算法. 失配指针类似KMP的nx数组,有效地利用了之前失配的信息,优化了时间复杂度 ...

  9. boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照

    首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/ ...

随机推荐

  1. 最好的PHP框架有哪些

    最好的PHP框架有哪些 首推 Laravel ,其次是 Yii,Laravel 的设计思想以及在工程实践上的支持,超过 ThinkPHP 好几个世代.如果说原生的 PHP 是火枪, ThinkPHP ...

  2. SPFA(Shortest Path Faster Algorithm)

    特别说明 本文转载自三金(frinemore)的博客: 点这 前言 1.关于SPFA,它没死. 2.接下来的所有代码,都是自己手写的(未检查正确性,补充的代码有检查过,是对的),有错误请帮忙指出. S ...

  3. JavaScript组成部分——ECMAScript、DOM、BOM、

    1.JavaScript组成部分 虽然 JavaScript 和 ECMAScript 通常被人们用来表达相同的含义,但 JavaScript 的含义却比ECMA-262标准中规定的要多得多. 一个完 ...

  4. 19.QT对话框(文件对话框,颜色对话框,字体框,自定义对话框)

    文件对话框 #include<QFileDialog> //文件对话框 void Dialog::on_pushButton_clicked() { //定义显示文件的类型 窗口标题 可供 ...

  5. ubuntu下无法将iNode绑定到侧边栏的解决办法

    title: ubuntu下无法将iNode绑定到侧边栏的解决办法 toc: false date: 2018-09-01 17:43:52 categories: methods tags: ubu ...

  6. SQL语句之transaction

    http://blog.csdn.net/xbc1213/article/details/50169935 案例: begin tran --定义一个存储错误新的变量 执行一条语句 set @sumE ...

  7. windows下安装reidis

    下载windows下redis安装包 https://github.com/MSOpenTech/redis/releases 这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了. 切换 ...

  8. python小项目之头像右上角加数字

    pillow介绍 一.Image类的属性:1.Format   2.Mode   3.Size    4.Palette    5.Info 二.类的函数:1.New   2.Open   3.Ble ...

  9. com.sun.jdi.internalException:Unexpected JDWP Error:103////Method threw 'java.lang.IllegalArgumentEx

    retrofit2+RxJava2 的一些坑 今天开发新项目,本着积极向上的学习态度,经过多番考虑我决定使用retrofit2 + RxJava2来做为我的网络请求......神说:你的想法非常好 先 ...

  10. POJ 1611 The Suspects【并查集】

    解题思路:一共给出 n个人,m组,接下来是m组数据,每一组开头是该组共有的人 num,则接下来输入的num个数,这些数是一组的 又因为最开始只有编号为0的人携带有病毒,且只有同一组的人会相互传染,问最 ...