图——深度优先算法(DFS)

在DFS遍历过程中,需要调用四个数组
          Color[u]: 用以区分结点是否被访问
                        WHITE: 未被发现的结点;
                        GRAY: 已经发现,但是尚未完成计算的结点;
                        BLACK: 已经完成计算的结点。
           pred[u]: 前序结点指针,指向结点u的前序结点
           d[u]: 从源结点到u的距离——结点变为GRAY的时间
           f[u]: 结束时间,关于结点u的所有操作结束时的时间——结点变为 BLACK的时间

伪代码解析

DFS(G)
Input: A graph G
Output: None
for 𝑢 𝑖𝑛 𝑉 do
    𝑐𝑜𝑙𝑜𝑟[𝑢] ←WHITE; //undiscovered
    𝑝𝑟𝑒𝑑[𝑢] ←NULL; //no predecessor
end
𝑡𝑖𝑚𝑒 ← 0;
for 𝑢 𝑖𝑛 𝑉 do
//start a new tree
    if 𝑐𝑜𝑙𝑜𝑟 𝑢 𝑖𝑠 𝑒𝑞𝑢𝑎𝑙 𝑡𝑜 𝑊𝐻𝐼𝑇𝐸 then
        DFSVisit(𝑢);
    end
end

 DFSVisit(u)  递归逐层进行访问

DFSVisit(u)  #递归函数
Input: A vertex u
Output: None
𝑐𝑜𝑙𝑜𝑟[𝑢] ←GRAY;   //u is discovered
𝑑 [𝑢 ]← ++𝑡𝑖𝑚𝑒;   //u’s discovery time
for 𝑣 ∈ 𝐴𝑑𝑗(𝑢) do
    //Visit undiscovered vertex
    if 𝑐𝑜𝑙𝑜𝑟 [𝑣] 𝑖𝑠 𝑒𝑞𝑢𝑎𝑙 𝑡𝑜 𝑊𝐻𝐼𝑇𝐸 then
        𝑝𝑟𝑒𝑑 [𝑣] ← 𝑢;
        DFSVisit(𝑣);
    end
end
𝑐𝑜𝑙𝑜𝑟[𝑢] ←BLACK;   //u has finished
𝑓 [𝑢] ← ++𝑡𝑖𝑚𝑒;     //u’s finish time

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值