Sha256: de50f5683f6164733e3cbbe16c8ba0edbb31b9770b39c1de28d06af330240427
Contents?: true
Size: 956 Bytes
Versions: 2
Compression:
Stored size: 956 Bytes
Contents
require "set" module Silicium module Graphs class Graph attr_accessor :nodes def initialize @nodes = [] end def add_edge(from, to) from.adjacents << to end end class Node attr_accessor :name, :adjacents def initialize(name) # using Set instead of an Array to avoid duplications @adjacents = Set.new @name = name end def to_s @name end end class TopologicalSortClass attr_accessor :post_order def initialize(graph) @post_order = [] @visited = [] graph.nodes.each { |node| dfs(node) unless @visited.include?(node)} end private def dfs(node) @visited << node node.adjacents.each { |adj_node| dfs(adj_node) unless @visited.include?(adj_node)} @post_order << node end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
silicium-0.0.22 | lib/topological_sort.rb |
silicium-0.0.21 | lib/topological_sort.rb |