【问题标题】:Depth-first search by edge property按边缘属性进行深度优先搜索
【发布时间】:2014-06-04 06:45:08
【问题描述】:

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

【问题讨论】:

    标签: python boost graph graph-tool


    【解决方案1】:

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

    u = GraphView(g, efilt=rel_need)
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      相关资源
      最近更新 更多