class TreeSolver

Attributes

maze[R]

Public Class Methods

new(maze) click to toggle source
# File lib/solver/tree_solver.rb, line 6
def initialize(maze)
        @maze = maze
end

Public Instance Methods

paths(*coords) click to toggle source
# File lib/solver/tree_solver.rb, line 10
def paths(*coords)
        current_cell = @maze.cell *coords
        root_node = current_node = Tree::TreeNode.new(current_cell.coords.map(&:to_s).join(','), current_cell)
        visited_cells = [current_cell]
        stack_node = []
        stack_cell = []
        while visited_cells.size != @maze.total_cells
                neighbours = current_cell.connected_neighbours
                unvisited_neighbours = neighbours - visited_cells
                if unvisited_neighbours.size == 0
                        current_cell = stack_cell.pop
                        current_node = stack_node.pop
                elsif unvisited_neighbours.size >= 1
                        current_cell = unvisited_neighbours.shift
                        stack_cell += unvisited_neighbours
                        stack_node += [current_node]*unvisited_neighbours.size
                end
                visited_cells << current_cell
                new_node = Tree::TreeNode.new(current_cell.coords.map(&:to_s).join(','), current_cell)
                current_node << new_node 
                current_node = new_node
        end
        root_node
end