Sha256: 52921a3d91310ef89e4503de4d540a21483d68e7226c31b45ec760fcfdaf46d2
Contents?: true
Size: 973 Bytes
Versions: 2
Compression:
Stored size: 973 Bytes
Contents
module Kruskal class MinimumSpanningTree attr_accessor :forest def initialize @forest = Forest.new end def add(value = 0, source, target) # Here is the full algorithm tree_source = find_tree_for(source) tree_target = find_tree_for(target) if tree_source.nil? && tree_target.nil? new_tree(value, source, target) elsif tree_source && tree_target.nil? tree_source.add(value, source, target) elsif tree_source.nil? && tree_target tree_target.add(value, source, target) elsif tree_source != tree_target tree_source.merge!(tree_target) tree_source.add(value, source, target) end end def run(data) data.each do |relation| add(*relation) end end private def find_tree_for(node) @forest.find_tree_for(node) end def new_tree(value, source, target) @forest.new_tree(value, source, target) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
kruskal-0.1.1 | lib/kruskal/minimum_spanning_tree.rb |
kruskal-0.1.0 | lib/kruskal/minimum_spanning_tree.rb |