Skip to content

Instantly share code, notes, and snippets.

@AndroidKitKat
Created December 10, 2019 03:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AndroidKitKat/6253c55be0bf899543c0ff7db565015c to your computer and use it in GitHub Desktop.
Save AndroidKitKat/6253c55be0bf899543c0ff7db565015c to your computer and use it in GitHub Desktop.
# frozen_string_literal: true
require 'set'
# User class
class User
def initialize(uid)
@id = uid
@associates = []
end
attr_reader :id
attr_reader :associates
def add_assoc(user)
@associates.push(user)
end
end
def bfs_iter(user_hash, vertex)
frontier = []
visited = Set[]
frontier.push(vertex)
until frontier.empty?
vertex = frontier.slice!(0)
next if visited.include?(vertex)
visited.add(vertex)
user_hash[vertex].each do |u|
frontier.push(u)
end
end
return visited
end
def build_assoc(edges)
user_array = []
user_set = Set[]
user_hash = {}
# figure out how many memebrs we have
edges.each do |edge|
edge.each do |member|
user_set.add(member)
end
end
user_set.each do |uid|
uuid = User.new(uid)
user_array.push(uuid)
end
edges.each do |assoc|
user_array[assoc[0] - 1].add_assoc(assoc[1])
user_array[assoc[1] - 1].add_assoc(assoc[0])
end
# build hash?
user_array.each do |user|
user_hash[user.id] = user.associates
end
puts bfs_iter(user_hash, 1)
# # my reference
# user_hash.each do |uid, assocs|
# # do w/e
# end
end
nverts = nil
nedges = nil
edges = []
STDIN.each do |line|
line = line
if nverts.nil?
nverts = line.chomp.to_i
elsif nedges.nil?
nedges = line.chomp.to_i
next
end
unless nverts.nil? || nedges.nil?
# grab edges
edges.push(line.split(' ').map(&:to_i))
# clear vars
end
next if edges.length != nedges
# function call
build_assoc(edges)
# clear vars
edges.clear
nverts = nil
nedges = nil
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment