美文网首页
7.5通用的深度优先搜索

7.5通用的深度优先搜索

作者: M_小七 | 来源:发表于2020-01-06 12:44 被阅读0次

    一般的深度优先搜索目标是在图上进行尽量深的搜索,连接尽量多的顶点,必要时可以进行分支(创建了树),有时候深度优先搜索会创建多棵树,称为“深度优先森林”
    深度优先搜索同样要用到顶点的“前驱”属性,来构建树或森林另外要设置“发现时间”和“结束时间”属性
    • 前者是在第几步访问到这个顶点(设置灰色)
    • 后者是在第几步完成了此顶点探索(设置黑色)
    这两个新属性对后面的图算法很重要

    带有DFS算法的图实现为Graph的子类,顶点Vertex增加了成员Discovery及Finish,图Graph增加了成员time用于记录算法执行的步骤数目
    通用的深度优先搜索算法代码:

    from basicGraph import Graph
    
    
    class DFSGraph(Graph):
        def __init__(self):
            super().__init__()
            
    
        def dfs(self):
            for v in self:
                v.setColor('white')
                v.setPred(None)
            for v in self:
                self.dfsvisit(v)
    
        def dfsvisit(self,startV):
            startV.setColor('gray')
    
            for nbr in startV.getConnections():
                if nbr.getColor() == 'white':
                    nbr.setPred(startV)
                    self.dfsvisit(nbr)
    
            startV.setColor('black')
            print(startV.getId())
    
    
    if __name__ == '__main__':
        g = DFSGraph()
        for i in range(6):
            g.addVertex(i)
    
    
        g.addEdge(0, 1, 5)
        g.addEdge(0, 5, 2)
        g.addEdge(1, 2, 4)
        g.addEdge(2, 3, 9)
        g.addEdge(3, 4, 7)
        g.addEdge(3, 5, 3)
        g.addEdge(4, 0, 1)
        g.addEdge(5, 4, 8)
        g.addEdge(5, 2, 1)
    
        g.dfs()
    
    
    

    相关文章

      网友评论

          本文标题:7.5通用的深度优先搜索

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