python实现图(基于图的不同存储方式)的深度优先(DFS)和广度(BFS)优先遍历

对于图的遍历操作,一般有两种方法:深度优先遍历和广度优先遍历。

这里我们说的图的遍历是针对连通图而言的,即图中任意的两节点都有一条或多条路径能够相同。

深度优先: 顾名思义,一条路走到黑,选取一个图中的一个节点中作为起始结点,从起始结点开始,不听的访问该节点的下一个结点,直到访问到该节点没有下一个结点与其相连或者与其相连的结点都被访问过,则回退至上一步,看其上一个结点是否还有没被访问的结点,如果有,则继续按照深度优先访问,没有就继续回退,直到确认图中所有的结点都被访问到,则遍历结束。

由此,我们可以看出,在图的深度优先搜索过程中存在一个回溯过程,当访问到的结点没有与它相连的结点,或者与其相连的结点都被访问过时,就需要回溯到上一个结点。由于栈存在先进后出的特点,所以我们可以用栈来实现这个过程。
如果访问到该结点的邻接点未被访问,则将其第一个未被访问的结点添加入栈,直到没有或者所有邻接点都被访问过则进行出栈,没出栈一个元素,都要判断其是否还有未被访问的邻接点,直到栈中所有元素都出栈或者确认图中所有结点都被访问完,则搜索过程结束。

!!!注意:
以下只给出图的深度遍历和广度优先遍历方法,至于图的存储请参考本人博客:
图的三种存储方式(字典形式,邻接矩阵形式,邻接链表形式)

图的邻接表存储,深度优先遍历python实现:

def depth_order(start_node):
    '''
    基于图的邻接链表存储表示,图的深度优先遍历
    :param start_node: 
    :return: 
    '''
    n = int(input("请输入图中结点的个数:"))
    # 实例化图对象
    my_graph = graph()
    # 创建结点
    for i in range(0, n):
        data = input("请输入结点:")
        # 实例化图结点对象
        data = graph_node(data)
        # 将结点添加至图中
        my_graph.add_node(data)
    # print("图中所有顶点:")
    for nn in my_graph.graph:
        print(nn.data, end=
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值