算法导论 - 9 - BFS 、DFS、Topological sort

伪代码

1.
BFS(x)

s=new queue

s.push(x)

while !s.empty()

    u=s.front

    s.pop

    u.visit=true

    for v has edge(u,v)

        if !v.visit // !!!only put not-visit node into queue

            s.push(v)


2.
DFS(G) //there might be many parts that have no mutual connection

for each u in G

    if !u.visit

        DFS-visit(G,u)


3.
DFS-visit(G,u) 

for v has edge(u,v)

    if !v.visit

        DFS-visit(v)

u.visit=true


3.//using a set 
topological-sort(G)

s->set of all node with no incoming edges

l->a list for sorted node

while !s.empty()

    u=s.front

    s.pop // remember to remove u from s once it is read

    for edge(u,v)

        remove edge(u,v)

        if v has no incoming edge

            s.push(v)

    insert u to the end of l

//check whether the graph has cycle

if graph has edges 

    return error"has at least one cycle"

else return l


4.//using dfs
topological-sort(G)

l->a list that contains sorted node (the result is a reversion of the reality)

// u don't need to be very special. Even if u has incoming edges, visiting it 

// ahead of visiting its father will also guarantee it appears later than its father
// in l

for each u in s

    if !u.visit

       dfs(u)

#put v into the front of l when v.visit is set to be true


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值