深度优先搜索边缘属性

时间:2014-04-19 22:47:51

标签: python boost graph graph-tool

我正在使用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 个答案:

答案 0 :(得分:1)

您应首先创建过滤后的图表。你可以这样做:

u = GraphView(g, efilt=rel_need)

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

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