假设我们有一个完全连通的有向图G
。顶点是[a,b,c]
。每个顶点之间都有两个方向的边。
给定一个起始 vertex a
,我想在所有方向上遍历图形并仅在遇到路径中已经存在的顶点时才保存路径。
所以,函数full_paths(a,G)
应该返回:
- [{a,b}, {b,c}, {c,d}]
- [{a,b}, {b,d}, {d,c}]
- [{a,c}, {c,b}, {b,d}]
- [{a,c}, {c,d}, {d,b}]
- [{a,d}, {d,c}, {c,b}]
- [{a,d}, {d,b}, {b,c}]
我不需要像[{a,b}]
or这样的“不完整”结果[{a,b}, {b,c}]
,因为它已经包含在第一个结果中。
除了生成 G 的幂集并过滤掉一定大小的结果之外,还有其他方法吗?
我该如何计算?
编辑:正如 Ethan 指出的,这可以通过深度优先搜索方法来解决,但不幸的是我不明白如何修改它,使其在回溯之前存储路径(我使用 Ruby Gratr来实现我的算法)