【发布时间】:2018-12-11 12:32:04
【问题描述】:
我是 boost 图形库的新手,正在尝试解决以下问题 问题:
在图中 (boost::adjacency_list) 我有 3 个不同的 顶点类型(使用 std::variant 实现)和当前 无向边:
- 连接器 (1)
- 开关 (2)
- SwitchState (3) - (ON/OFF)
我的图表中典型的层次结构是这样的:
(1a) - (2a) - (1b) - (1d) - (2b) - (1e)
| |
(3a) (3b)
| |
(1c)
我需要做的是找到所有可到达的顶点 从某个起点(例如 1a):
1a -> 2a -> 1b -> 1d -> 2b -> 1e
当然会立即想到使用 BFS 或 DFS! :-)
但是:顶点 (2) 的状态(开关或继电器) 由直接连接的状态(布尔值)控制 顶点 (3)。这意味着没有办法穿越 如果(3a)(假设)为假,则通过顶点(2a)从(1a)到(1b)。 最后:不能从类型 (2) 遍历到类型 (3) 顶点。
我的问题是:有没有人对如何 有效地实现这样的图遍历?我已经使用大量向量/映射等和 DFS 在普通 C++ 中实现了这一点,但希望将代码移动到底层图形的更高、更抽象(但希望仍然有效)的实现!
我不确定我是否应该:
- 使用filtered_graph,只用BFS或DFS遍历?
- 然后根据类型 3 顶点状态创建一个子图并应用 BFS/DFS?
- 在通过 BFS/DFSvisitor 进行搜索时,是否可以“即时”实现这一目标?
- 另一种解决方案?
非常欢迎有帮助的想法!
PS:代码用于模拟电网 - 以防万一。
【问题讨论】:
标签: c++ boost graph depth-first-search boost-graph