3

我正在为 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())

似乎我应该在检查边缘定义中进行某种检查,但我无法找到解释它的文档。我在 tree_edge def 中进行了检查,它成功过滤了所有 rel_need=true 边,但它不会改变遍历。如何制作仅遍历某些边缘而不是所有边缘的 DFSVisitor?

4

1 回答 1

1

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

u = GraphView(g, efilt=rel_need)

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

然后,您可以继续使用 graph 进行 DFS 搜索,u其边rel_need[e] == False将被忽略。

于 2014-04-28T15:53:43.307 回答