private int FilterDomain(SudokuVariable variable) { variable.ResetDomain(); int removedValues = 0; foreach (SudokuVariable related in relatedFields[variable]) { if (!related.IsEmpty()) { bool removed = variable.Domain.Remove(related.Value); if (removed) { removedValues++; } } } return(removedValues); }
private void OrderDomain(SudokuVariable currElem) { int removedValues; Dictionary <int, int> valuesRemovedByEachNumber = new Dictionary <int, int>(); foreach (int value in currElem.Domain) { removedValues = int.MaxValue; currElem.Value = value; if (CheckConstraints(currElem)) { removedValues = FilterDomainsOfAllRelatedFields(currElem); currElem.Value = 0; ResetDomainsOfAllRelatedFields(currElem); } else { currElem.Value = 0; } valuesRemovedByEachNumber.Add(value, removedValues); } currElem.OrderedDomain = valuesRemovedByEachNumber.OrderBy(kv => kv.Value).Select(kv => kv.Key).ToList(); currElem.ResetDomain(); }