图的DFS

def DFS_graph(graph,v0):
    vnum = graph.vertex_num()
    visited = [0]*vnum;
    visited[v0]=1
    DFS_seq = [v0]
    st = SStack()
    st.push((0,graph.out_edges(v0))
    while not st.is_empty():
        i,edges = st.pop()
        if i<len(edges):
            v,e = edges[i]
            st.push((i+1,edges))
            if not visited[v]:
                DFS_seq.append(v) //如果是新的结点,则加载到seq序列中
                visited[v]=1
                st.push(0,graph.out_edges(v))
    return DFS_seq

摘自裘宗燕的python数据结构

使用堆栈避免递归。注意:栈里记录了访问邻接矩阵行,以及其列坐标

while循环里:

1. 弹 pop

2.记录当前行以及i, 如果该行没有到尽头,压入该行下一个;

3.访问当前行的i,如果没有访问过则压栈

即 弹;压;如果新,压

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值