当前位置: 首页 > news >正文

【图论实战】Boost学习 01:基本操作

文章目录

  • 头文件
  • 图的构建
  • 图的可视化
  • 基本操作

头文件

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/graph/properties.hpp>
#include <boost/property_map/property_map.hpp>
#include <boost/graph/named_function_params.hpp>
//#include<boost/graph/dijkstra_shortest_paths.hpp>
#include <iostream>
#include <fstream>
using namespace boost;
using namespace std;

图的构建

参考网址

// 无属性图的定义
typedef adjacency_list<vecS, //表示顶点是用vector来存储的vecS, // 表示边是用vector来存储的directedS, //表示有向图no_property, //表示不带属性no_property> //表示不带属性MyGraphType;// 有属性图的定义
struct VertexProperty{int id;string name;
};
struct EdgeProperty{int id;int weight;
};
typedef boost::adjacency_list<vecS, 			//使用数组来存储vertex vecS,bidirectionalS, 	//声明为有向图,可以访问其out-edge,若要都能访问VertexProperty, 	//定义顶点属性EdgeProperty> 	//定义边的属性 > Graph;在此之前,要定义顶点和边的属性,可以用结构体自定义MyGraphType;// 创建图	
MyGraphType G;
auto v0=add_vertex(G);
auto v1=add_vertex(G);
auto v2=add_vertex(G);
auto v3=add_vertex(G);
auto e01=add_edge(v0,v1,G);
auto e12=add_edge(v1,v2,G);
auto e23=add_edge(v2,v3,G);
auto e30=add_edge(v3,v0,G);
// 设置权重
property_map<MyGraphType,edge_weight_t>::type weightmap= get(boost::edge_weight, G);
weightmap[e]=10.1; 		// 方式1
put(weightmap,e,20); 	// 方式2
// 获取顶点ID

图的可视化

方式一: 利用graphviz
1、将图保存为gv文件

// g is the graph
boost::dynamic_properties dp;
dp.property("node_id", get(boost::vertex_index, G));
dp.property("label",  get(boost::edge_weight,  G));
ofstream outf("min.gv");
write_graphviz_dp(outf, G,dp);

2、将gv文件转化为png文件
工具下载 graphviz 2.38

在线转换工具

方式二: 打印结果

auto vpair =vertices(G);
for(auto iter=vpair.first;iter!=vpair.second;iter++){cout<<"vertex "<<*iter<<endl;
}auto epair=edges(G);
for(auto iter=epair.first;iter!=epair.second;iter++){cout<<"edge "<<source(*iter,G)<<" - "<<target(*iter,G)<<endl;
}	

基本操作

// 获取顶点个数
boost::num_vertices(g)
http://www.lryc.cn/news/229098.html

相关文章:

  • Rust 中的引用与借用
  • Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型
  • XML Web 服务 Eclipse实现中的sun-jaxws.xml文件
  • 16.1 二次根式 教学设计及课堂检测设计
  • Android数据流的狂欢:Channel与Flow
  • Java 单元测试最佳实践:如何充分利用测试自动化
  • windows系统用于 SDN 的软件负载均衡器 (SLB)
  • 漏洞复现--IP-guard flexpaper RCE
  • Electron-vue出现GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案
  • Linux---(六)自动化构建工具 make/Makefile
  • 谷歌:编写干净的代码以减少认知负荷
  • 微信小程序display常用属性和子元素排列方式介绍
  • 设计模式—结构型模式之代理模式
  • C# PDF转HTML字符串
  • el-table解决数据过少小于高度有留白的问题
  • vue实现无感刷新token
  • 竞赛选题 深度学习的动物识别
  • Python高级语法----Python C扩展与性能优化
  • 行业洞察:分布式云如何助力媒体与娱乐业实现创新与增长?
  • 【多线程 - 05、后台线程】
  • C语言之文件操作(剩余部分)
  • 【PC】开发者日志:竞技比赛验证系统强化
  • c++用map,创建类似于python中的字典
  • VuePress介绍及使用指南
  • Spring-Security前后端分离权限认证
  • Django中Cookie和Session的使用
  • 云原生周刊:KubeSphere 3.4.1 发布 | 2023.11.13
  • 逐帧动画demo
  • Mongodb 中,与索引相关的监控指标
  • 图论14-最短路径-Dijkstra算法+Bellman-Ford算法+Floyed算法