修改深度优先搜索

时间:2017-11-05 09:50:55

标签: algorithm data-structures

(来源,目的地)及其类型(树,后,前,交)?

2 个答案:

答案 0 :(得分:2)

你走了。 Java中的代码

EmpSys

答案 1 :(得分:0)

好问题。

这是基于the source you posted as comment的解决方案。 重要提示:开始/结束表上有错误,第三行第三列应为“end [u]< end [v]”而不是“end [u]> end [v]”

    void main(G, s){
        for each node v in G{
            explored[v]=false
            parent[v]=null
            start[v]=end[v]=null
        }
        Global clock = 0
        DFS(G, s, s)
    }

    void DFS(G, s, parent){
        explored[s] = true;
        parent[s] = parent

        start[s]=clock
        clock++

        for each u=(s,v){
            if(explored[v] == false){
                 DFS(G, v)
            } 
            print (s + "-->" + v +"type: " + getType(s,v))
        }

        end[s]=clock
        clock++
    }

    String getType(s, v){
        if(start[s]<start[v]){
            if(end[s]>end[v]) return "Tree edge"
            else return "Forward edge"
        else{
            if(end[s]<end[v]) return "Back edge"
            else return "Cross edge"
        }
    }