Sha256: 51d0142e4f30d2d91e62bccf10f829cdd9b56ab1735ef9473d9fa1b6f4e2edf1

Contents?: true

Size: 979 Bytes

Versions: 2

Compression:

Stored size: 979 Bytes

Contents

require 'tree'

class TreeSolver
	attr_reader :maze

	def initialize(maze)
		@maze = maze
	end

	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
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rmaze-2.1.0 lib/solver/tree_solver.rb
rmaze-2.0.0 lib/solver/tree_solver.rb