# This module provides a simple abstract class `BacktrackProblem[S,A]` to be specialized for a specific problem.
#
# The concrete class `BacktrackSolver` is used to configure, query, and run a solver for a given problem.
+#
+# For an example, see the `queens.nit` program in the `examples` subdirectory.
module backtrack
# Abstract backtrack problem of states (`S`) and actions (`A`).
# # Basic search
#
# The method `solve` returns a new solver for a backtrack search.
-class BacktrackProblem[S: Object,A]
+abstract class BacktrackProblem[S: Object,A]
# The starting state of the problem.
# It is this object that will be modified by `apply_action` and `backtrack`.
fun initial_state: S is abstract
# 2. Apply the method `run`, that will search and return a solution.
# 3. Retrieve information from the solution.
#
-# ~~~~
+# ~~~~nitish
# var p: BacktrackProblem = new MyProblem
# var solver = p.solve
# var res = solver.run
problem.backtrack(state, a)
node = node.parent
+ assert node != null
continue
end