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

for BFS and DFS

# File lib/rbutils/graph/graph.rb, line 25
def add_adjacency(n1, n2)
  n1.adjacents << n2
  n2.adjacents << n1
end
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