public BacktrackingSolver(ICombinatoricsProblem <TPart> problem) { if (problem == null) { throw new ArgumentNullException("problem"); } this.problem = problem; }
static double GetPosition(ICombinatoricsProblem <TPart> problem, IEnumerable <TPart> configuration) { if (!configuration.Any()) { return(0); } double headFraction = (double)problem.Parts.GetIndex(configuration.First()) / (double)problem.Parts.Count(); double tailFraction = GetPosition(problem, configuration.Skip(1).ToArray()) / (double)problem.Parts.Count(); return(headFraction + tailFraction); }