计算BFS算法中的节点和弧

时间:2017-02-06 12:03:17

标签: graph computer-science graph-algorithm

在DFS中,您可以通过初始化两个计数器并在DFS-VISIT过程中递增它们来计算元素(每次调用过程时+1节点,每次探查邻接列表时+1弧)。我想知道如何在BFS中获得相同的结果。 这是来自Cormen的“算法导论”的BFS伪代码,其中G是图,s是源节点,d是距离,π是父节点。如何修改它以获得G?

中的节点数和弧数
BFS(G, s)
    for each node u ∈ G.V - {s}
        u.color = white 
        u.d = ∞
        u.π = NIL
    s.color = GRAY
    s.d = 0
    s.π = NIL
    Q = Ø
    ENQUEUE(Q, s)
    while Q != Ø
        u = DEQUEUE(Q)
        for each v ∈ G.Adj[u]
                if v.color == WHITE
                        v.color = GRAY
                        v.d = u.d + 1
                        v.π = u
                        ENQUEUE(Q, v)
        u.color = BLACK

1 个答案:

答案 0 :(得分:0)

嗯,邻接列表遍历和新顶点(节点)发现都是在伪代码的最后while循环中完成的。因此,类似下面给出的修改可能有用。

numArcs = 0
numNodes = 0
while Q != Ø
    u = DEQUEUE(Q)
    numNodes += 1
    for each v ∈ G.Adj[u]
            numArcs += 1
            if v.color == WHITE
                    v.color = GRAY
                    v.d = u.d + 1
                    v.π = u
                    ENQUEUE(Q, v)
    u.color = BLACK

请注意,如果要计算所有弧,numArcs的增量应该在其后面的if语句的范围之外,因为if语句仅在目标节点先前未入队时输入

另请注意,此算法仅提供连接组件中的弧和节点数,包括起始节点s。因此,除非修改BFS算法以处理具有多个连接组件的图形的情况,否则此算法将无法找到未连接的图形中的所有节点和弧。