DFS

作者: IT孤独者 | 来源:发表于2018-01-31 17:53 被阅读0次
import enum
import collections

class BuildGraphic:
    def __init__(self):
        self.G = dict()
        self.G['u'] = ['v', 'x']
        self.G['x'] = ['v']
        self.G['v'] = ['y']
        self.G['y'] = ['x']
        self.G['w'] = ['y', 'z']
        self.G['z'] = ['z']

    def get(self):
        return self.G

class DFS:
    Color = enum.Enum('Color', 'WHITE GRAY BLACK')

    class VInfo:
        def __init__(self):
            self.color = DFS.Color.WHITE
            self.parent = None
            self.d = int()
            self.f = int()

        def __repr__(self):
            return '(%s, %s, %d, %d)' % (self.color, self.parent, self.d, self.f)

    def __init__(self, G):
        self.G = G
        self.time = 0
        self.VerToVInfo = { key : DFS.VInfo() for key in self.G }

    def __call__(self, *args, **kwargs):
        for s in self.G:
            self.visit(s)

        return self

    def visit(self, u):
        if self.VerToVInfo[u].color != DFS.Color.WHITE:
            return

        self.VerToVInfo[u].color = DFS.Color.GRAY
        self.time += 1
        self.VerToVInfo[u].d = self.time
        for v in self.G[u]:
            self.VerToVInfo[v].parent = u
            self.visit(v)

        self.time += 1
        self.VerToVInfo[u].f = self.time
        self.VerToVInfo[u].color = DFS.Color.BLACK

    def get_vinfo(self):
        return self.VerToVInfo

if __name__ == '__main__':
    G = BuildGraphic()
    print(DFS(G.get())().get_vinfo())

DFS 算法.png DFS code.png

相关文章

  • 各种DFS

    DFS邻接矩阵遍历图 DFS邻接表遍历图 DFS回溯(不走重复路径) DFS背包(可重复选) DFS背包(不可重复选)

  • HDFS shell操作

    创建目录hdfs dfs -mkdir 查看所有目录hdfs dfs -ls / 上传文件hdfs dfs -pu...

  • Binary Tree(2)

    BFS vs DFS for Binary Tree What are BFS and DFS for Binar...

  • Clone Graph (Leetcode 133)

    DFS Approach: 注意,对于DFS,对map的赋值要在DFS loop开始以前。这样可以避免由于grap...

  • hdfs的命令行使用

    语法:hdfs dfs 参数 hdfs dfs -ls / 查看根路径下面的文件或文件夹 hdfs dfs -mk...

  • DFS与N皇后问题

    DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索。 它是一种用来遍历或搜索树和图数...

  • DFS及其应用

    内容概要: DFS类的实现 DFS求解连通分量 DFS求解点对之间的一个路径 DFS判定无环图和二分图 相关概念 ...

  • 684. 冗余连接

    主要掌握并查集/dfs/拓扑排序.dfs里要注意从后面开始查,特别是dfs函数如何设计以及

  • 剑指 Offer II 102. 加减的目标值

    首先想到的dfs 好家伙 1500ms。感觉差点就超时了= =。。dfs总是这样= =。。 优化写法 另类的dfs...

  • 算法-Tree深度优先搜索

    DFS(Depth-First Search) DFS 是一种递归形式的搜索方式。相对于“层”的概念,DFS更偏向...

网友评论

      本文标题:DFS

      本文链接:https://www.haomeiwen.com/subject/mzelzxtx.html