Recursive backtracking



Fun


April 12th, 2021





I wrote this for “fun” after taking our intro AI class.

IAssignment RecursiveBacktracking(CSP csp, IAssignment assignment)
{
    NumberOfSteps++;

    if (NumberOfSteps > TimeoutNumberOfSteps)
    {
        throw new Exception($"Timed out after {TimeoutNumberOfSteps} steps.");
    }

    if (assignment.IsComplete())
    {
        return assignment;
    }

    string variable = SelectVariableMethod(assignment, csp);
    foreach (int value in OrderValuesMethod(assignment, csp, variable))
    {
        if (assignment.IsVariableValueConsistent(variable, value))
        {
            assignment.Assign(variable, value);

            IAssignment result = RecursiveBacktracking(csp, assignment);

            if (result != default(IAssignment))
            {
                return result;
            }

            assignment.Unassign(variable);
        }
    }
    return null;
}

This site is open source. Improve this page »