数据模型,图形库,c++
Data model, graph library, C++
我正在创建一个c++库来实现图形算法。我正在考虑类"图"的适当表示。
有两种主要类型的图(有向/无向)和表示(列表/矩阵)。
我对算法没有问题…但是我想提出一个合适的和健壮的数据结构(包括类的继承序列,如果需要的话)。
目前我没有使用任何特殊的数据结构来表示图,静态方法有作为输入参数的关联,邻接…矩阵。
这样的类应该保留图的两种表示还是只有一种表示,并在两种表示之间使用转换函数?哪一种更好呢?
这个问题已经被很多人用不同的方法解决了。在重新发明轮子之前,您可以看一下boost::graph。别忘了绑定属性
你这样做是为了上课还是作为学习练习?因为如果没有,正如你所指出的,这个问题已经解决过很多次了。当你浏览各种各样的解决方案时,你会意识到有些问题是你甚至没有想到的,比如:
- 有向/无向图
- 将用户数据与节点和边关联
- 稀疏图与密集图
- 大图与小图
- 模板与非模板
- 对其他包的依赖
等等…
试着看看一些最流行的实现:
https://stackoverflow.com/questions/2751826/which-c-graph-library-should-i-use相关文章:
- 提升图形库:资源受限的最短周期
- 提升图形库 - 深度优先 仅通过连接的顶点进行搜索
- 如何在提升图形库中获取属性的类型
- 提升图形库:以高性能的方式检查vertex_descriptor的有效性
- 提升图形库 - 具有正好 N 条边/顶点的图形
- 有没有办法通过 LEMON 图形库中的 Map 值获取节点?
- 提升图形库 - 将矢量推送到边缘属性
- 是否可以同时使用 GUI 和 3D 图形库创建应用程序
- 创建像OpenGL这样的图形库
- 提升图形库:防止 DFS 访问未连接的节点
- 用于将三维模型导入OpenGL/C++项目的推荐文件格式和图形库
- 无法链接 read_graphviz() 示例的提升图形库
- 提升图形库:获取edge_descriptor或通过 int 类型的索引访问边缘
- 使用两个访问者提升图形库
- 提升图形库:顶点过滤图上的 BFS
- 在使用 BOOST 图形库生成的图形中添加随机边
- C/C++图形库查询节点由三个部分组成
- 我正在尝试通过 Boost 图形库从 Graphviz DOT 文件中读取图形.如何读取存储在数组中的未知数量的属性
- 我应该使用图形库吗?
- 提升图形库 - 来自外部向量的权重属性