zoukankan      html  css  js  c++  java
  • DFS & BFS

    1.DFS & BFS

    深度优先算法
    (1)访问初始顶点v并标记顶点v已访问。
    (2)查找顶点v的第一个邻接顶点w。
    (3)若顶点v的邻接顶点w存在,则继续执行;否则回溯到v,再找v的另外一个未访问过的邻接点。
    (4)若顶点w尚未被访问,则访问顶点w并标记顶点w为已访问。
    (5)继续查找顶点w的下一个邻接顶点wi,如果v取值wi转到步骤(3)。直到连通图中所有顶点全部访问过为止。

    广度优先算法
    (1)顶点v入队列。
    (2)当队列非空时则继续执行,否则算法结束。
    (3)出队列取得队头顶点v;访问顶点v并标记顶点v已被访问。
    (4)查找顶点v的第一个邻接顶点col。
    (5)若v的邻接顶点col未被访问过的,则col入队列。
    (6)继续查找顶点v的另一个新的邻接顶点col,转到步骤(5)。直到顶点v的所有未被访问过的邻接点处理完。转到步骤(2)。

    class Grapy(object):
        """docstring for Grapy"""
        def __init__(self, *arg,graph={}):
            self.graph = graph
            self.visited = {}
    
        def depth_first_traverse(self,root=None):
            result=[]
    
            def dft(node):
                self.visited[node]=True
                result.append(node)
                for n in self.graph[node]:
                    if not n in self.visited:
                        dft(n)
    
            if root:
                dft(root)
    
            return result
    
        def breadth_first_traverse(self,root=None):
            queue = [root]
            result = [root]
            def bft():
                while queue:
                    node = queue.pop(0)
                    self.visited[node] = True
                    for n in self.graph[node]:
                        if (not n in self.visited) and (not n in queue):
                            queue.append(n)
                            result.append(n)
            if root:
                bft()
    
            return result
    
  • 相关阅读:
    springboot中filter的配置和顺序执行
    springboot整合fastdfs实现上传和下载
    移动端通过fiddler代理调试PC端代码
    react-native windows 环境搭建
    带你逐行阅读redux源码
    前端单页面拆分多个单页面
    Koa2学习(九)与mongoDB交互
    Koa2学习(八)使用session
    Koa2学习(七)使用cookie
    Koa2学习(六)使用koa-router
  • 原文地址:https://www.cnblogs.com/binwone/p/6127197.html
Copyright © 2011-2022 走看看