【问题标题】:Counting nodes and arcs in BFS Algorithm在 BFS 算法中计算节点和弧
【发布时间】:2017-02-06 12:03:16
【问题描述】:

在 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

【问题讨论】:

    标签: graph computer-science graph-algorithm


    【解决方案1】:

    好吧,邻接列表遍历和新顶点(节点)发现都是在伪代码的最后一个 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 算法被修改以处理图具有多个连通分量的情况,否则该算法不会找出未连通图中的所有节点和弧。

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多