examples/graph/minimum_spanning_tree.rb in wukong-3.0.0.pre vs examples/graph/minimum_spanning_tree.rb in wukong-3.0.0.pre2
- old
+ new
@@ -1,73 +1,73 @@
-require Pathname.path_to(:examples, 'graph/union_find')
-require 'gorillib/model/serialization'
+# require Pathname.path_to(:examples, 'graph/union_find')
+# require 'gorillib/model/serialization'
-class Airfare
- include Gorillib::Model
+# class Airfare
+# include Gorillib::Model
- field :from, String
- field :into, String
- field :price, Integer
- field :from_name, String
- field :into_name, String
+# field :from, String
+# field :into, String
+# field :price, Integer
+# field :from_name, String
+# field :into_name, String
- def undirected_edge
- [from, into].sort
- end
-end
+# def undirected_edge
+# [from, into].sort
+# end
+# end
-airfares = File.open(Pathname.path_to(:data, 'graph/airfares.tsv')).
- readlines.
- map{|line| line.split("\t").map(&:strip) }.
- map{|vals| Airfare.from_tuple(*vals) }
+# airfares = File.open(Pathname.path_to(:data, 'graph/airfares.tsv')).
+# readlines.
+# map{|line| line.split("\t").map(&:strip) }.
+# map{|vals| Airfare.from_tuple(*vals) }
-# airfares.sort_by(&:undirected_edge).each do |airfare|
-# puts "%-7s\t%-7s\t%-7s\t%-7s\t%d" % [*airfare.undirected_edge, airfare.from, airfare.into, airfare.price]
-# end
+# # airfares.sort_by(&:undirected_edge).each do |airfare|
+# # puts "%-7s\t%-7s\t%-7s\t%-7s\t%d" % [*airfare.undirected_edge, airfare.from, airfare.into, airfare.price]
+# # end
-cities = airfares.map(&:from).uniq | airfares.map(&:into)
+# cities = airfares.map(&:from).uniq | airfares.map(&:into)
-edges = {}
-airfares.each do |airfare|
- edge = airfare.undirected_edge
- edges[edge] = airfare.price unless edges.include?(edge) && edges[edge] <= airfare.price
-end
+# edges = {}
+# airfares.each do |airfare|
+# edge = airfare.undirected_edge
+# edges[edge] = airfare.price unless edges.include?(edge) && edges[edge] <= airfare.price
+# end
-mst = Hash.new{|h,k| h[k] = {} }
-forest = Wukong::Widget::DisjointForest.new
+# mst = Hash.new{|h,k| h[k] = {} }
+# forest = Wukong::Widget::DisjointForest.new
-edges.sort_by(&:last).each do |(city_a, city_b), price|
- forest.add(city_a) if not forest.include?(city_a)
- forest.add(city_b) if not forest.include?(city_b)
- next if forest.find(city_a) == forest.find(city_b)
- forest.union(city_a, city_b)
- mst[city_a][city_b] = price
-end
+# edges.sort_by(&:last).each do |(city_a, city_b), price|
+# forest.add(city_a) if not forest.include?(city_a)
+# forest.add(city_b) if not forest.include?(city_b)
+# next if forest.find(city_a) == forest.find(city_b)
+# forest.union(city_a, city_b)
+# mst[city_a][city_b] = price
+# end
-$mst_both = Hash.new{|h,k| h[k] = {} }
-mst.each{|city_a, hsh| hsh.each{|city_b, price|
- $mst_both[city_a][city_b] = price
- $mst_both[city_b][city_a] = price
-}}
-def dfs(city, seen)
- seen << city
- children = $mst_both[city].keys - seen
- # [children, children.map{|child| dfs(child, seen) } ]
- children.map{|child| [ child, dfs(child, seen) ] }
-end
-sorted_cities = ['LAS', dfs('LAS', [])]
+# $mst_both = Hash.new{|h,k| h[k] = {} }
+# mst.each{|city_a, hsh| hsh.each{|city_b, price|
+# $mst_both[city_a][city_b] = price
+# $mst_both[city_b][city_a] = price
+# }}
+# def dfs(city, seen)
+# seen << city
+# children = $mst_both[city].keys - seen
+# # [children, children.map{|child| dfs(child, seen) } ]
+# children.map{|child| [ child, dfs(child, seen) ] }
+# end
+# sorted_cities = ['LAS', dfs('LAS', [])]
-gv_filename = Pathname.path_to(:tmp, 'airfares_mst')
-File.open("#{gv_filename}.dot", 'w') do |gv_file|
- gv_file.puts "graph AirfareMST {\n label=\"#{Time.now}\"; height= 800; labelloc = t; mindist = 1.5 ; "
- # gv_file.puts "mode = hier;"
- gv_file.puts 'node [ shape = "plaintext" ]; '
- sorted_cities.flatten.each{|city| gv_file.puts " #{city};" }
- mst.sort_by(&:first).each do |from, hsh|
- hsh.sort_by(&:first).each do |into, price|
- gv_file.puts " %-7s -- %-7s [ label = \"%d\" ];" % [from, into, price]
- end
- end
- gv_file.puts "}"
-end
-`neato -Tpng #{gv_filename}.dot -o #{gv_filename}.png`
+# gv_filename = Pathname.path_to(:tmp, 'airfares_mst')
+# File.open("#{gv_filename}.dot", 'w') do |gv_file|
+# gv_file.puts "graph AirfareMST {\n label=\"#{Time.now}\"; height= 800; labelloc = t; mindist = 1.5 ; "
+# # gv_file.puts "mode = hier;"
+# gv_file.puts 'node [ shape = "plaintext" ]; '
+# sorted_cities.flatten.each{|city| gv_file.puts " #{city};" }
+# mst.sort_by(&:first).each do |from, hsh|
+# hsh.sort_by(&:first).each do |into, price|
+# gv_file.puts " %-7s -- %-7s [ label = \"%d\" ];" % [from, into, price]
+# end
+# end
+# gv_file.puts "}"
+# end
+# `neato -Tpng #{gv_filename}.dot -o #{gv_filename}.png`