class GraphReader::Graph
Attributes
adj_matrix[RW]
edges[RW]
nodes[RW]
Public Class Methods
new(edge_path)
click to toggle source
# File lib/graph-reader.rb, line 10 def initialize(edge_path) raise ArgumentError, "expect (String), got #{edge_path.class}" unless edge_path.instance_of? String @nodes = [] @edges = [] init_edges(edge_path) @adj_map = {} set_adj_map(@adj_map) @adj_matrix = init_adj_matrix(@nodes.size) set_adj_matrix(@adj_matrix) @dim = @edges.first.attrs.size end
Public Instance Methods
neighbor?(n1, n2)
click to toggle source
# File lib/graph-reader.rb, line 25 def neighbor?(n1, n2) @adj_matrix[@adj_map[n1]][@adj_map[n2]] == 1 end
Private Instance Methods
add_edge(edge)
click to toggle source
# File lib/graph-reader.rb, line 35 def add_edge(edge) new_edge = GraphReader::Edge.new(edge) unless duplicate_edge?(new_edge) @edges << new_edge add_node(new_edge.src) add_node(new_edge.dst) end end
add_node(node)
click to toggle source
# File lib/graph-reader.rb, line 31 def add_node(node) @nodes << node unless @nodes.include?(node) end
duplicate_edge?(new_edge)
click to toggle source
# File lib/graph-reader.rb, line 63 def duplicate_edge?(new_edge) @edges.each { |edge| return true if same_edge?(edge, new_edge) } false end
init_adj_matrix(size)
click to toggle source
# File lib/graph-reader.rb, line 52 def init_adj_matrix(size) Array.new(size) { Array.new(size, 0) } end
same_edge?(edge1, edge2)
click to toggle source
# File lib/graph-reader.rb, line 68 def same_edge?(edge1, edge2) edge1_src_id = edge1.src edge1_dst_id = edge1.dst edge2_src_id = edge2.src edge2_dst_id = edge2.dst return true if edge1_src_id == edge2_src_id && edge1_dst_id == edge2_dst_id return true if edge1_dst_id == edge2_src_id && edge1_src_id == edge2_dst_id false end
set_adj_map(adj_map)
click to toggle source
# File lib/graph-reader.rb, line 44 def set_adj_map(adj_map) adj_pos = 0 @nodes.each do |n| adj_map[n] = adj_pos adj_pos += 1 end end
set_adj_matrix(adj_matrix)
click to toggle source
# File lib/graph-reader.rb, line 56 def set_adj_matrix(adj_matrix) @edges.each do |e| adj_matrix[@adj_map[e.src]][@adj_map[e.dst]] = 1 adj_matrix[@adj_map[e.dst]][@adj_map[e.src]] = 1 end end