class Graph
Constants
- VERSION
Attributes
edges[R]
vertices[R]
Public Class Methods
new(vertices = [], edges = [])
click to toggle source
# File lib/graph.rb, line 8 def initialize(vertices = [], edges = []) @vertices = vertices @edges = edges end
Public Instance Methods
add(vertex_or_edge)
click to toggle source
# File lib/graph.rb, line 23 def add(vertex_or_edge) return add_vertex(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Vertex) return add_edge(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Edge) end
Also aliased as: <<
delete(vertex_or_edge)
click to toggle source
# File lib/graph.rb, line 28 def delete(vertex_or_edge) return delete_vertex(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Vertex) return delete_edge(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Edge) end
include?(vertex_or_edge)
click to toggle source
# File lib/graph.rb, line 13 def include?(vertex_or_edge) return include_vertex?(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Vertex) return include_edge?(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Edge) end
index_of(vertex_or_edge)
click to toggle source
# File lib/graph.rb, line 18 def index_of(vertex_or_edge) return index_of_vertex(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Vertex) return index_of_edge(vertex_or_edge) if vertex_or_edge.is_a?(Graph::Edge) end
to_h()
click to toggle source
# File lib/graph.rb, line 33 def to_h # O(vertices.size) + O(edges.size) result = {} @vertices.each do |vertex| result[vertex.key] = vertex.to_h end @edges.each do |edge| result[edge.from.key][:edges] << edge.to_h result[edge.to.key][:edges] << edge.to_h end result end
Private Instance Methods
add_edge(edge)
click to toggle source
# File lib/graph.rb, line 72 def add_edge(edge) return false if index_of_edge(edge) add_vertex(edge.from) add_vertex(edge.to) edge.send(:add_to, self) @edges << edge self end
add_vertex(vertex)
click to toggle source
# File lib/graph.rb, line 64 def add_vertex(vertex) return false if index_of_vertex(vertex) vertex.send(:add_to, self) @vertices << vertex self end
delete_edge(edge)
click to toggle source
# File lib/graph.rb, line 94 def delete_edge(edge) idx = index_of_edge edge return false unless idx edge.send(:add_to, nil) @edges.delete_at idx self end
delete_vertex(vertex)
click to toggle source
# File lib/graph.rb, line 82 def delete_vertex(vertex) idx = index_of_vertex vertex return false unless idx edges.each do |edge| delete_edge(edge) if (edge.from.key == vertex.key) || (edge.to.key == vertex.key) end vertex.send(:add_to, nil) @vertices.delete_at idx self end
include_edge?(edge)
click to toggle source
# File lib/graph.rb, line 52 def include_edge?(edge) @edges.include? edge end
include_vertex?(vertex)
click to toggle source
# File lib/graph.rb, line 48 def include_vertex?(vertex) @vertices.include? vertex end
index_of_edge(target)
click to toggle source
# File lib/graph.rb, line 60 def index_of_edge(target) @edges.index { |edge| edge.key == target.key } end
index_of_vertex(target)
click to toggle source
# File lib/graph.rb, line 56 def index_of_vertex(target) @vertices.index { |vertex| vertex.key == target.key } end