Sha256: 067fe86da10e2a9542b51368479649486e3c32271634708ac93052292715744c

Contents?: true

Size: 999 Bytes

Versions: 1

Compression:

Stored size: 999 Bytes

Contents

require 'tree'

class TreeSolver
	attr_reader :maze

	def initialize(maze)
		@maze = maze
	end

	def paths(start_x, start_y)
		current_cell = @maze.cell(start_x, start_y)
		root_node = current_node = Tree::TreeNode.new("#{current_cell.x},#{current_cell.y}", current_cell)
		visited_cells = [current_cell]
		stack_node = []
		stack_cell = []
		while visited_cells.size != @maze.width * @maze.height
			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.x},#{current_cell.y}", current_cell)
			current_node << new_node 
			current_node = new_node
		end
		root_node
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rmaze-1.5.0 lib/solver/tree_solver.rb