我正在使用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?

===============>>#1 票数:1 已采纳

您应该首先创建一个过滤图。 你可以做:

u = GraphView(g, efilt=rel_need)

其中rel_need是一个布尔属性映射,其中rel_need[e] == True表示边缘未被滤除。

然后,您可以使用图形u继续进行DFS搜索,并忽略rel_need[e] == False的边缘。

  ask by shawnrushefsky translate from so

未解决问题?本站智能推荐:

关注微信公众号