class Graph
Attributes
connections[RW]
edges[RW]
nodes[RW]
Public Class Methods
new()
click to toggle source
# File lib/rbutils/graph/graph.rb, line 8 def initialize @nodes = Set.new @edges = Array.new @connections = Hash.new end
Public Instance Methods
add_adjacency(n1, n2)
click to toggle source
add_edge(source, dest, weight)
click to toggle source
adds an edge dest the graph
# File lib/rbutils/graph/graph.rb, line 20 def add_edge(source, dest, weight) edges << Edge.new(source, dest, weight) end
add_node(node)
click to toggle source
# File lib/rbutils/graph/graph.rb, line 14 def add_node(node) nodes << node node.graph = self end
adjacents(node)
click to toggle source
# File lib/rbutils/graph/graph.rb, line 64 def adjacents node @connections[node] end
connect(node1, node2)
click to toggle source
connects two nodes in the graph
# File lib/rbutils/graph/graph.rb, line 31 def connect node1, node2 if !Set.new([node1, node2]).subset? @nodes raise BadNodeInput, 'The graph does not have either ' + node1 + ' or ' + node2 end @connections[node1] ||= Array.new @connections[node1].push node2 unless node1.eql? node2 @connections[node2] ||= Array.new @connections[node2].push node1 end end
degree(node)
click to toggle source
returns the degree of the specified node
# File lib/rbutils/graph/graph.rb, line 53 def degree node d = 0 if (@connections[node].is_a? (Array)) && nodes.include?(node) d = @connections[node].count if @connections[node].include?(node) d += 1 end end return d end
disconnect(node1, node2)
click to toggle source
disconnects two nodes in the graph
# File lib/rbutils/graph/graph.rb, line 44 def disconnect node1, node2 if !nodes.include?(node1) || !nodes.include?(node2) raise NodeContainsException, 'The graph does not contain either ' + node1 + ' or ' + node2 end @connections[node1].delete node2 @connections[node2].delete node1 end