Method: NetworkX::Graph#each_dfs_edge

Defined in:
lib/networkx/traversals/edge_dfs.rb

#each_dfs_edge(node) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/networkx/traversals/edge_dfs.rb', line 93

def each_dfs_edge(node)
  return enum_for(:each_dfs_edge, node) unless block_given?

  st = [node]
  used = {}
  parents = {}
  while st[-1]
    node = st.pop

    yield(parents[node], node) if parents[node]

    used[node] = true
    @adj[node].reverse_each do |v, _data|
      next if used[v]

      parents[v] = node
      st << v unless used[v]
    end
  end
end