我正在使用python的图形工具,一个实现boost的库。我需要仅使用具有edge_property的边缘进行深度优先搜索:
rel_need = True
所以,我正在使用
gt.dfs_search(g, g.vertex(0), NeedFinder(rel_need, pred, time))
使用此DFSVisitor:
class NeedFinder(gt.DFSVisitor):
def __init__(self, rel_need, pred, time):
self.rel_need = rel_need
self.pred = pred
self.time = time
self.last_time = 0
def discover_vertex(self, u):
self.time[u] = self.last_time
self.last_time += 1
def examine_edge(self, e):
pass
def tree_edge(self, e):
if self.rel_need[e]:
self.pred[e.target()] = int(e.source())
似乎我应该在examine_edge def中进行某种检查,但我还没有找到解释它的文档。我在tree_edge def中进行了检查,它成功地过滤了所有rel_need = true边缘,但它并没有改变遍历。如何创建仅遍历某些边缘而不是所有边缘的DFSVisitor?
答案 0 :(得分:1)
您应首先创建过滤后的图表。你可以这样做:
u = GraphView(g, efilt=rel_need)
其中rel_need是布尔属性映射,其中rel_need[e] == True
表示边缘未被滤除。
然后,您可以使用图表u
继续进行DFS搜索,并忽略rel_need[e] == False
的边缘。