class RubyAi::Search::Graph
Attributes
edges[R]
vertices[R]
Public Class Methods
directed(&block)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 12 def directed(&block) new(directed: true, &block) end
new(directed:, &block)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 21 def initialize(directed:, &block) @vertices = [] @edges = [] @directed = directed instance_eval(&block) if block_given? end
undirected(&block)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 8 def undirected(&block) new(directed: false, &block) end
Public Instance Methods
edge(from:, to:, cost: 1)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 37 def edge(from:, to:, cost: 1) start_vertex = find_or_create_vertex(name: from) end_vertex = find_or_create_vertex(name: to) create_forward_edge(start_vertex: start_vertex, end_vertex: end_vertex, cost: cost) create_reverse_edge(start_vertex: start_vertex, end_vertex: end_vertex, cost: cost) unless @directed self end
method_missing(method, *args, **kwargs, &block)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 28 def method_missing(method, *args, **kwargs, &block) send(method, *args, **kwargs, &block) end
vertex(name)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 32 def vertex(name) @vertices.push(Vertex.new(name: name)) self end
Private Instance Methods
create_forward_edge(start_vertex:, end_vertex:, cost:)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 56 def create_forward_edge(start_vertex:, end_vertex:, cost:) @edges.push(Edge.new(start_vertex: start_vertex, end_vertex: end_vertex, cost: cost)) end
create_reverse_edge(start_vertex:, end_vertex:, cost:)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 60 def create_reverse_edge(start_vertex:, end_vertex:, cost:) @edges.push(Edge.new(start_vertex: end_vertex, end_vertex: start_vertex, cost: cost)) end
find_or_create_vertex(name:)
click to toggle source
# File lib/ruby_ai/search/graph.rb, line 48 def find_or_create_vertex(name:) unless @vertices.find { |vertex| vertex.name == name } vertex = Vertex.new(name: name) @vertices.push(vertex) end @vertices.find { |vertex| vertex.name == name } end