class GraphMatrix

Attributes

edges[W]
type[W]
weight_limit[W]

Public Class Methods

new(args) click to toggle source
# File lib/graphify/graph_matrix.rb, line 3
def initialize(args)
  @type = args[:type]
  @weight_limit = args[:weight_limit]
  if args.has_key?(:num_vertices)
    @edges = Array.new(args[:num_vertices]) { Array.new(args[:num_vertices]) }
    initialize_helper(args[:num_vertices], args[:num_edges])
  else
    @edges = args[:edge_matrix]
  end
end

Public Instance Methods

edges() click to toggle source
# File lib/graphify/graph_matrix.rb, line 44
def edges
  result = []
  (0..(@edges.length - 1)).each do |index|
    (0..(@edges.length - 1)).each do |s_index|
      next if @type == 'undirected' && s_index < index
      result << [index, s_index] if @edges[index][s_index] != nil
    end
  end
  result
end
edges_with_weights() click to toggle source
# File lib/graphify/graph_matrix.rb, line 55
def edges_with_weights
  result = []
  (0..(@edges.length - 1)).each do |index|
    (0..(@edges.length - 1)).each do |s_index|
      next if @type == 'undirected' && s_index < index
      result << [index, s_index, @edges[index][s_index]] if @edges[index][s_index] != nil
    end
  end
  result
end
get_edge_weight(from, to) click to toggle source
# File lib/graphify/graph_matrix.rb, line 32
def get_edge_weight(from, to)
  @edges[from][to]
end
get_in_edges(vertex) click to toggle source
# File lib/graphify/graph_matrix.rb, line 23
def get_in_edges(vertex)
  return if (vertex < 0 || vertex >= @edges.length)
  vertices = []
  (0..(@edges.length - 1)).each do |index|
    vertices << index if @edges[index][vertex] != nil
  end
  vertices
end
get_out_edges(vertex) click to toggle source
# File lib/graphify/graph_matrix.rb, line 14
def get_out_edges(vertex)
  return if (vertex < 0 || vertex >= @edges.length)
  vertices = []
  (0..(@edges.length - 1)).each do |index|
    vertices << index if @edges[vertex][index] != nil
  end
  vertices
end
vertices() click to toggle source
# File lib/graphify/graph_matrix.rb, line 36
def vertices
  vertices = []
  (0..(@edges.length - 1)).each do |index|
    vertices << index
  end
  vertices
end

Private Instance Methods

add_edge_helper(to, from, counter) click to toggle source
# File lib/graphify/graph_matrix.rb, line 78
def add_edge_helper(to, from, counter)
  return counter if @edges[from][to] != nil
  @edges[from][to] = generate_edge_weight
  @edges[to][from] = @edges[from][to] if @type == 'undirected'
  counter + 1
end
generate_edge_weight() click to toggle source
# File lib/graphify/graph_matrix.rb, line 85
def generate_edge_weight
  if @weight_limit == 0
    1
  else
    rand(@weight_limit)
  end
end
initialize_helper(num_vertices, num_edges) click to toggle source
# File lib/graphify/graph_matrix.rb, line 68
def initialize_helper(num_vertices, num_edges)
  counter = 0
  while counter < num_edges
    from = rand(num_vertices)
    to = rand(num_vertices)
    next if from == to
    counter = add_edge_helper(to, from, counter)
  end
end