图的遍历 python

图的遍历

在这里插入图片描述

def breadth_first_search(graph,root):   ##宽度优先搜索  队列实现
    if not root:
        return
    traverse = [root]     ##遍历列表
    my_queue = [root]      ##队列
    while my_queue:
        next = my_queue.pop(0)
        for current in graph[next]:
            if current not in traverse:
                traverse.append(current)
                my_queue.append(current)
    return traverse

def depth_first_search(graph,root):   ##深度优先搜索  堆栈实现
    if not root:
        return
    stack = [root]      ##堆栈
    traverse = [root]      ##遍历列表
    while stack:
        next = stack.pop()
        for current in graph[next]:
            if current not in traverse:
                stack.append(next)
                stack.append(current)
                traverse.append(current)
                break  #保持深度优先
    return traverse

def depth_first_search_recursion(graph,root): ##深度优先搜索递归实现
    traverse = [root]
    def dfs(graph,root,traverse):
        if not root:
            return
        for next in graph[root]:
            if next not in traverse:
                traverse.append(next)
                dfs(graph,next,traverse)
        return traverse
    return dfs(graph,root,traverse)

if __name__ == '__main__':
    # graph = {
    #     'a':['c','d'],
    #     'b':['a','c','f'],
    #     'c':['b','e'],
    #     'd':['e'],
    #     'e':['g'],
    #     'f':['g'],
    #     'g':[]
    # }
    graph = {
        'A': ['B', 'F'],
        'B': ['C', 'I', 'G'],
        'C': ['B', 'I', 'D'],
        'D': ['C', 'I', 'G', 'H', 'E'],
        'E': ['D', 'H', 'F'],
        'F': ['A', 'G', 'E'],
        'G': ['B', 'F', 'H', 'D'],
        'H': ['G', 'D', 'E'],
        'I': ['B', 'C', 'D'],
    }
    print(breadth_first_search(graph,'A'))
    print(depth_first_search(graph,'A'))
    print(depth_first_search_recursion(graph,'A'))
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

viziviuz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值