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(start_x, start_y) ⇒ 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(start_x, start_y) ⇒ 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(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 |