使用Boost.Graph库创建一个简单的图(Graph)
概要
Boost.Graph库提供了一套丰富的图形算法和数据结构,用于处理图和网。Boost与C++标准库无缝协作,并且很多Boost库的功能最终被纳入了C++标准本身,在企业级应用开发、科学计算、游戏开发等领域中有广泛应用
本文使用Boost.Graph库创建一个简单的图(Graph)。在这个例子中,将创建一个无向图,并添加顶点和边,之后打印出图的结构,用Graphviz生成图,为使用Graphviz,需要安装Graphviz
- 下载并在VS2019中配置Boost库
- 下载安装并在VS2019中配置Graphviz
- 测试
内容
1. 下载并在VS2019中配置Boost库
1.1 下载Boost库
访问Boost官方网站。下载最新版本的Boost库(或你需要的特定版本)

1.2 解压Boost库
下载完毕后,将Boost库解压到你选择的目录中,解压后大约700多MB
例如,可以解压到 D:\boost183
1.3 在Visual Studio中配置Boost
需要设置包括头文件目录和库目录的项目属性
打开Visual Studio,创建或打开你的项目
右击项目名称,选择“属性”
在“配置属性”下,设置以下选项
C/C++ -> 常规 -> 附加包含目录:在这里添加你的Boost头文件目录,如 D:\boost183
链接器 -> 常规 -> 附加库目录:添加Boost库文件目录,如,D:\boost183\libs
确保这些设置对所有需要的配置(如Debug和Release)和平台(如x64)都进行了配置

点击上图中的“<编辑…>”
弹出如下对话框
选一个空行,输入 D:\boost183,确定,即可



类似上述操作,链接器 -> 常规 -> 附加库目录,添加“D:\boost183\libs”

1.4 测试Boost安装
创建一个测试项目,包括Boost库的头文件,调用Boost简单功能,验证安装
例如:
#include <boost/version.hpp>
#include <iostream>
int main() {
std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl;
return 0;
}
编译并运行此程序,如果一切设置正确,将输出Boost库的版本号

2. 下载安装并在VS2019中配置Graphviz
2.1 从 Graphviz 官网下载并安装 Graphviz
安装过程中,请记住 Graphviz 的安装路径。

** 这一步特别注意,勾选以后,后面就不需要自己设置环境变量了**




2.2 设置环境变量(可选)
如果安装过程中没有自动设置,可能需要手动将 Graphviz 的二进制文件所在的目录“Graphviz\bin ”添加到你的系统环境变量中:
- 右键点击“我的电脑”或“此电脑”,选择“属性”。
- 点击“高级系统设置”。 在“系统属性”窗口中,点击“环境变量”
- 在“系统变量”区域,找到并编辑 Path 变量,添加 Graphviz 的 bin 目录路径
2.3 在 Visual Studio 中配置项目
同前,
右键点击项目名称,选择“属性”
在“配置属性”中,设置以下选项:
C/C++ -> 常规 -> 附加包含目录:在这里添加 Graphviz 的头文件目录,通常为: Graphviz\include
** 链接器 -> 常规 -> 附加库目录**:添加 Graphviz 库文件目录,通常为 Graphviz\lib
** “链接器 -> 输入 -> 附加依赖项”**中,添加所需的 Graphviz 库文件名。 gvc.lib、cgraph.lib 等

3. 测试
3.1 测试代码
在当前目录下会生成 "graph.dot"文件,以及“graph.png”文件
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>
#include <boost/graph/graphviz.hpp>
#include <iostream>
// 定义一个无向图
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> Graph;
int main() {
// 创建一个图
Graph g;
// 添加顶点
Graph::vertex_descriptor v1 = add_vertex(g);
Graph::vertex_descriptor v2 = add_vertex(g);
Graph::vertex_descriptor v3 = add_vertex(g);
Graph::vertex_descriptor v4 = add_vertex(g);
// 添加边
add_edge(v1, v2, g);
add_edge(v2, v3, g);
add_edge(v3, v4, g);
add_edge(v4, v1, g);
add_edge(v1, v3, g);
// 打印图信息
std::cout << "Graph:" << std::endl;
boost::print_graph(g, std::cout);
// 使用Graphviz输出图的可视化表示(需要Graphviz支持)
boost::write_graphviz(std::cout, g); // 命令行界面输出
//生成 DOT 语言描述的图形文件。DOT 是一种图形描述语言,用于描述图的结构
std::ofstream dot_file("graph.dot");
boost::write_graphviz(dot_file, g);
dot_file.close();
// system 函数调用 Graphviz 的命令行工具来转换 DOT 文件
system("dot -Tpng graph.dot -o graph.png");
return 0;
}
.hpp 是文件命名约定,用于明确表示一个文件是 C++ 的头文件,在 C++(和 C)中,文件扩展名 .h 或 .hpp 并不影响代码的编译方式,因为编译器处理文件的方式基于文件的内容。
3.2 运行结果
3.2.1 命令行窗口结果

3.2.2 当前Project文件夹以及 PNG图

打开png文件为

本文详细指导如何在VisualStudio2019环境中下载、配置Boost和Graphviz库,以创建并展示一个简单的无向图,涉及添加顶点和边,以及使用Graphviz生成可视化图形。
262

被折叠的 条评论
为什么被折叠?



