private void Backtrack(int l, Permutation g, IBacktracker backtracker) { if (backtracker.IsFinished()) { return; } if (l == size) { backtracker.ApplyTo(g); } else { for (int i = 0; i < size; i++) { var h = this.permutations[l][i]; if (h != null) { Backtrack(l + 1, g.Multiply(h), backtracker); } } } }
/// <summary> /// Apply the backtracker to all permutations in the larger group. /// </summary> /// <param name="backtracker">a hook for acting on the permutations</param> public void Apply(IBacktracker backtracker) { this.Backtrack(0, new Permutation(size), backtracker); }