示例#1
0
        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);
        }
示例#2
0
        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();
        }