图的遍历

1. 深度优先

  • 深度优先遍历的非递归算法

    def dfs_nonrec(graph, v0):
        vnum = graph.vertex_num()
        visited = [0]*vnum
        visited[v0] = 1
        st = []                               # 作为堆栈使用
        dfs_seq = []        
    
        st.append((0, graph.out_edges(v0)))
        while len(st) > 0:
            i, edges = st.pop()
            st.append((i+1, edges))
            v, e = edges[i]
            if not visited[v]:
                dfs_seq.append(v)
                visited[v] = 1
                st.append((0, graph.out_edges(v)))              

    堆栈中的元素形式为为 (i, edges),其中 edges 表示是某个顶点的出边表(比如 graph.out_edges(v0)),i 是目前访问的边表的下标,因为是深度优先,先访问 v0 的第一个出边,v0 的第一个出边能够达到的点全部遍历完毕之后,回过头来(回溯) v0 的第二个出边;

转载于:https://www.cnblogs.com/mtcnn/p/9423996.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值