Class: TreeSolver
- Inherits:
-
Object
- Object
- TreeSolver
- Defined in:
- lib/solver/tree_solver.rb
Instance Attribute Summary collapse
-
#maze ⇒ Object
readonly
Returns the value of attribute maze.
Instance Method Summary collapse
-
#initialize(maze) ⇒ TreeSolver
constructor
A new instance of TreeSolver.
- #paths(*coords) ⇒ Object
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
#maze ⇒ Object (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 |