//#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. Regexp-Utils:银行卡号Luhm校验

    ylbtech-Regexp-Utils:银行卡号Luhm校验 1.返回顶部 1.方法 //Description: 银行卡号Luhm校验 //Luhm校验规则:16位银行卡号(19位通用): // ...

  2. BZOJ 2957 分块

    思路: 记录每栋楼楼顶与原点连线的斜率 那么一栋楼可见当且仅当前面所有楼的斜率都小于这栋楼 将n栋楼分为√(0.5*n*logn)块 每一块内维护一个单调上升子序列(注意不是LCS) 比如说4 1 2 ...

  3. Spring《四-一》解决自动装配的问题

    自动化装配使得研发减少了响应的指配工作,但是使得响应的检查难以完成. 解决方法: simple模式: <bean autowire="autodetect" dependen ...

  4. C++之易混淆知识点五

    一.解析类继承中父类与子类之间成员的访问可见度: 外部可见度:指的是被子类继承的父类成员在子类的外部访问控制度,有protected.public.private. 内部可见度:指的是被子类继承的父类 ...

  5. [原创]c语言中const与指针的用法

    最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题:   1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a;  ...

  6. Functional programming-函数式编程

    In computer science, functional programming is a programming paradigm—a style of building the struct ...

  7. Chrome添加Unity本地文档引擎

    前提:输入Unity后出来的第一连接 浏览器的设置: 分别填入: UnityDocs unity3d.com/cn file:///Applications/Unity/Documentation/e ...

  8. 前端精选文摘:css之BFC 神奇背后的原理(转载)

    一.BFC是什么? 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说 ...

  9. css——外部样式

    外部样式 先建立一个css文件,如下: 然后开始写代码,不要加<style> 然后可以在html文件中的<head>内引用:<link rel="stylesh ...

  10. IOS - Autorelease for CGMutablePathRef?

    http://stackoverflow.com/questions/2819548/autorelease-for-cgmutablepathref Autorelease pools exist ...