You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
660 B
Ruby

# needs refactoring
class BFS
def initialize(graph, s)
@graph = graph
@s = s
@visited = [@s]
@edge_to = {}
end
def bfs(target)
return true if target == @s
queue = [@s]
while queue.length > 0
node = queue.shift
@graph[node].each do |child_node|
return true if child_node == target
next if @visited.include? child_node
queue.push(child_node)
@visited.push(child_node)
@edge_to[child_node] = node
end
end
false
end
def path_to?(node)
path = []
until node == @s
path.unshift(node)
node = @edge_to[node]
end
path
end
end