22.boost图模板
//#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图模板的更多相关文章
- 16款值得一用的iPhone线框图模板 (PSD & Sketch)
在任何网站或移动应用设计的过程中,线框图作为设计元素和功能的图示,它有助于帮助定义和更好地传达信息层次结构,让参与设计和开发的人员更好的理解设计师的思路和设计的功能点. 即使线框图设计是一个比较耗时的 ...
- hdu 2987最大权闭合图模板类型题
/* 最大权闭合图模板类型的题,考验对知识概念的理解. 题意:如今要辞退一部分员工.辞退每个员工能够的到一部分利益(能够是负的),而且辞退员工,必须辞退他的下属.求最大利益和辞退的最小人数. 最大权闭 ...
- 《Ext JS模板与组件基本知识框架图----模板》
最近在整理Ext JS的模板和组件,在参考<Ext JS权威指南>,<Ext JS Web应用程序开发指南>,<Ext JS API>等相关书籍后才写下这篇< ...
- C#学习笔记思维导图 一本书22张图
阅读的书是<21天学通C#>博客中有下载 看看总结之后的模块 全部文件 初步展示 数据存储 继承模块 暂时就这些吧 全部思维导图22张打包下载
- 《算法导论》学习总结 — XX.第22章 图的基本算法
BFS(广搜): 广搜就是广度优先搜索,根据名字可以知道,是通过广度来遍历图,也就是层次遍历吧. 在这里以及下面的DFS(深搜),都用到了颜色WHITE,GRAY,BLACK,不过作用不同,具体分别再 ...
- 18.boost 图的拓扑排序
运行结果: 代码示例: #include <iostream> #include <vector> #include <deque> #include <bo ...
- 16.boost图深度优先遍历DFS
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...
- Trie图 模板
trie图实际上是优化的一种AC自动机. trie图是在trie树上加一些失配指针,实际上是类似KMP的一种字符串匹配算法. 失配指针类似KMP的nx数组,有效地利用了之前失配的信息,优化了时间复杂度 ...
- boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照
首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/ ...
随机推荐
- php实现邮箱激活功能
php实现邮箱激活功能 一.样例 二.文件结构 其中swiftmailer-master是第三方插件,用来发验证邮件 三.核心代码 doAction.php 响应页面 <?php header( ...
- notepad++ 插件推荐——快速定位文件
介绍Notepad++的文章很多,我这里就不赘述了.简言之,是一个轻便的文本编辑工具.结合丰富的插件,可以实现很多功能,可以成为一个轻量级的IDE,用来做脚本开发非常合适. 这里介绍几个插件可以用来进 ...
- EOJ 3 玩具谜题
小南有一套可爱的玩具小人,它们各有不同的职业. 有一天,这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时 singer 告诉小南一个谜题 ...
- 个人作业—Alpha项目测试
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业要求在哪里 https://edu.cnblo ...
- BroadcastReceiver广播接受者简单使用
1.注册BrocadcastReceiver <receiver android:name=".FirstReceiver" > <!-- 指定能够接收的广播类型 ...
- vim常用的基本命令
vim 常用的基本命令1. w [文件名] 相当于另存为2. r [文件名] 将[文件名]的内容加到光标行后面3. n1,n2 w[filename] 将n1到n2的内容保存为[file ...
- C++利用函数模板得到数组的长度
#include<iostream> template <typename T, int N> int ArraySize (T (&arr)[N]) { //此处是数 ...
- 安装Oracle 12c及解决遇到的问题
一.[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置) 原文链接:https://blog.csdn.net/u013388049/article/details/85 ...
- java中内存溢出和内存泄漏的区别
虽然在java中我们不用关心内存的释放, 垃圾回收机制帮助我们回收不需要的对象,但实际上不正当的操作也会产生内存问题:如,内存溢出.内存泄漏 内存溢出:out of memory:简单通俗理解就是内存 ...
- elasticsearch的安装和使用
准备环境: 环境: win7 64位 jdk1.8.0 elasticsearch2.3.3 elasticsearch2.3.3:https://www.elastic.co/thank-you ...