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/ ...
随机推荐
- shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
博客背景和目的 最近在用C++写一个底层的东西,需要读取和创建shp文件.虽然接触shp文件已经几年了,但是对于shp文件内到底包含什么东西一直是一知半解.以前使用shp文件都是利用软件(如ArcGI ...
- Flask Cookie和Session
1.1.概念 cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了解决这个问题,第 ...
- Redis学习笔记(一) 初识 Redis
简介 我所在的公司是一个以线下业务为主的公司,软件这一块的东西可以说是手工作坊,技术上的东西全靠大家自己折腾.最近也是觉得自己在社会主义的怀抱里安逸了太久,要提高思想政治觉悟,不能忘了资本主义的黑暗, ...
- Android Fragment RecycleListView
1.新建SuperActivity package com.example.ting.criminalintentpractise; import android.os.Bundle;import a ...
- 数组常用API
内容待添加... //根据分数排名字 //方法1 var students = ['小明','小红','小花'] var scores = {小明:,小红:,小花:} //1 添加分数到student ...
- iOS11即将到来,让我们具体了解下
谷歌开发者大会后,苹果的WWDC终于也要来了,目前准确时间已经确定. 近日,苹果官方发出的公告显示,WWDC 2017将在北京时间6月6日凌晨1点正式进行,同时他们强调会进行现场直播,用户可以在苹果主 ...
- java简单实现MD5加密
1.话不多说,直接上代码-----传入字符串,返回加密码 import java.security.MessageDigest; import java.text.NumberFormat; publ ...
- 区间dp+四边形不等式优化
区间dp+四边形优化 luogu:p2858 题意 给出一列数 \(v_i\),每天只能取两端的数,第 j 天取数价值为\(v_i \times j\),最大价值?? 转移方程 dp[i][j] :n ...
- How Google Backs Up The Internet Along With Exabytes Of Other Data
出处:http://highscalability.com/blog/2014/2/3/how-google-backs-up-the-internet-along-with-exabytes-of- ...
- composer install或者update 出错
composer install或者update 出错Your requirements could not be resolved to an installable set of package ...