Class: TreeSolver

Inherits:
Object
  • Object
show all
Defined in:
lib/solver/tree_solver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(maze) ⇒ TreeSolver

Returns a new instance of TreeSolver.



6
7
8
# File 'lib/solver/tree_solver.rb', line 6

def initialize(maze)
	@maze = maze
end

Instance Attribute Details

#mazeObject (readonly)

Returns the value of attribute maze.



4
5
6
# File 'lib/solver/tree_solver.rb', line 4

def maze
  @maze
end

Instance Method Details

#paths(*coords) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 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