C++ 用Boost.Graph库来创建一个简单的图(VisualStudio2019)

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

概要

Boost.Graph库提供了一套丰富的图形算法和数据结构,用于处理图和网。Boost与C++标准库无缝协作,并且很多Boost库的功能最终被纳入了C++标准本身,在企业级应用开发、科学计算、游戏开发等领域中有广泛应用

本文使用Boost.Graph库创建一个简单的图(Graph)。在这个例子中,将创建一个无向图,并添加顶点和边,之后打印出图的结构,用Graphviz生成图,为使用Graphviz,需要安装Graphviz

  1. 下载并在VS2019中配置Boost库
  2. 下载安装并在VS2019中配置Graphviz
  3. 测试

内容

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文件为
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dotdotyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值