• 图的广度优先搜索(BFS)与深度优先搜索(DFS) Python实现


    1.广度优先搜索

     1 # 图的广度优先遍历
     2 # 1.利用队列实现
     3 # 2.从源节点开始依次按照宽度进队列,然后弹出
     4 # 3.每弹出一个节点,就把该节点所有没有进过队列的邻接点放入队列
     5 # 4.直到队列变空
     6 from queue import Queue
     7 def bfs(node):
     8     if node is None:
     9         return
    10     queue = Queue()
    11     nodeSet = set()
    12     queue.put(node)
    13     nodeSet.add(node)
    14     while not queue.empty():
    15         cur = queue.get()               # 弹出元素
    16         print(cur.value)                # 打印元素值
    17         for next in cur.nexts:          # 遍历元素的邻接节点
    18             if next not in nodeSet:     # 若邻接节点没有入过队,加入队列并登记
    19                 nodeSet.add(next)
    20                 queue.put(next)

    2.深度优先搜索

     1 # 图的深度优先遍历
     2 # 1.利用栈实现
     3 # 2.从源节点开始把节点按照深度放入栈,然后弹出
     4 # 3.每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈
     5 # 4.直到栈变空
     6 def dfs(node):
     7     if node is None:
     8         return
     9     nodeSet = set()
    10     stack = []
    11     print(node.value)
    12     nodeSet.add(node)
    13     stack.append(node)
    14     while len(stack) > 0:
    15         cur = stack.pop()               # 弹出最近入栈的节点
    16         for next in cur.nexts:         # 遍历该节点的邻接节点
    17             if next not in nodeSet:    # 如果邻接节点不重复
    18                 stack.append(cur)       # 把节点压入
    19                 stack.append(next)      # 把邻接节点压入
    20                 set.add(next)           # 登记节点
    21                 print(next.value)       # 打印节点值
    22                 break                   # 退出,保持深度优先
  • 相关阅读:
    struts2学习笔记之校验器
    struts2学习笔记之文件上传
    在ASP.net MVC里用Jquery的Ajax功能调用相关LinqtoSQL生成的类出现错误循环引用
    Linq,企业类库,EXECL生成,Execl chart的一些基本操作记录.(一)
    记录Linq所学.
    记录一个很平常的想法.
    链表反序(C#版)
    oracle 体系结构
    Oracle的sys和system用户的区别
    数据库触发器的理解
  • 原文地址:https://www.cnblogs.com/icekx/p/9152452.html
Copyright © 2020-2023  润新知