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

    DFS

    想清楚几个关键点:
    • 底层支持dfs的数据结构是栈,这个栈可以是系统自动帮我们提供和维护(递归写法),也可以我们自己来模拟(迭代写法)
    • 注意任何时候栈里面维护的数据只是一条深度方向的路径,而不是维护整棵树,栈中的数据是动态更新的,代码处理技巧类似bfs给当前层级维护队列的技巧(之前有一次快手面试在这个点上犯迷糊了)
    • 注意回溯之后可能需要“恢复现场”
    • 注意有些问题可能需要剪枝优化
      • 最优性剪枝,剪掉一定不是最优解的方案
      • 可行性剪枝,剪掉一定不合法的方案
    模板
    visited = set()
    def dfs(node, visited):
        visited.add(node)
        #process current node here
        ...
        for next_node in node.children():
            if not next_node in visited:
                dfs(next_node, visited)
    

    例题

    BFS

    关键点
    • 宽搜自带“最短路”功能,限定条件是所有边长都为1
    • 宽搜需要借助队列这种数据结构来实现,类似地,任何时刻只需要维护当前层的数据
    模板
    def BFS(graph, start, end):
        
        queue = []
        queue.append([start])
        visited.add(start)
        
        while queue:
            node = queue.pop()
            visited.add(node)
            
            process(node)
            nodes = generate_related_nodes(node)
            queue.push(nodes)
            
        # other processing work
        ...
    
    例题
  • 相关阅读:
    模块二:操作系统windows 7 的使用
    茶卡盐湖
    css元素居中指南
    新的CMS套站
    写响应式页面
    积累
    jquery方法整理
    积累 做网站添加的 所有动态效果
    产品中心有二级三级栏目。
    aspcms
  • 原文地址:https://www.cnblogs.com/huhu555/p/14696468.html
Copyright © 2011-2022 走看看