用栈消除递归调用,实现DFS【伪代码】

DFS(G)it

  for each vertex u in G.Vim

  u.color = whitetop

  u.pi = NILwhile

  time = 0co

  let A be a stacktime

  for each vertex u in G.Vlet

    if u.color == whitepush

    A.push(u)

  while A is not empty

    x = A.top()

    flag = 0

    for each v in G:Adj[x]

      if v.color == white//遇到堆栈顶端元素相邻的节点有白色的都入栈

        flag = 1

        time = time + 1

        v.d = time

        v.pi = x

        v.color = gray

        A.push(v)

    if flag == 0//若是栈顶端节点全部相邻节点都不是白色【均被标记为灰色或者黑色】则出栈

      y = A.pop()

      y.color = black

      time = time + 1

      y.f = time

相关文章
相关标签/搜索