예제 #1
0
        private void TryEveryVariantIfNoSolusion()
        {
            int indexOfFirstElement = RowOrColumnToBeCalculated.GetIndexOfRowOrColumnByNumberInQueue(rowsAndColumnsToBeCalculated, 0);
            int variantsCount       = rowsAndColumnsToBeCalculated[indexOfFirstElement].VariantsCount;
            CloneOfStaticsOfRowOrColumnToBeCalculated clone = new CloneOfStaticsOfRowOrColumnToBeCalculated(rowsAndColumnsToBeCalculated, indexOfFirstElement);

            for (int i = 0; i < variantsCount; i++)
            {
                RowOrColumnToBeCalculated.SetStatics(rowsAndColumnsToBeCalculated, clone);
                rowsAndColumnsToBeCalculated[indexOfFirstElement].possibleSolutions = new List <bool[]>();
                rowsAndColumnsToBeCalculated[indexOfFirstElement].possibleSolutions.Add(clone.cloneRowOrColumnToBeCalculated[indexOfFirstElement].possibleSolutions[i]);
                rowsAndColumnsToBeCalculated[indexOfFirstElement].VariantsCount = 1;
                RowOrColumnToBeCalculated.Calculate(rowsAndColumnsToBeCalculated);
                if (RowOrColumnToBeCalculated.IsMainFieldFilled)
                {
                    solutions.Add(RowOrColumnToBeCalculated.CloneMainField());
                }
                else
                {
                    if (!RowOrColumnToBeCalculated.IsError)
                    {
                        TryEveryVariantIfNoSolusion();
                    }
                }
                for (int j = 0; j < rowsAndColumnsToBeCalculated.Length; j++)
                {
                    Task.WaitAll(rowsAndColumnsToBeCalculated[j].tasksForRemovingIrrelevantVariants.ToArray());
                }
            }
        }
 private void SetStaticsIfValidated(int sumRows, int sumColumns, int maxConditionRowLength, int maxConditionColumnLength)
 {
     if (sumRows != sumColumns)
     {
         AddError(Textes.errorConditionSumDifferent[Textes.currentLang]);
     }
     else
     {
         if (IsValidate)
         {
             RowOrColumnToBeCalculated.SetStatics(mainField, mainFieldHeight, mainFieldWidth, sumRows);
             Cell.UpdateMainFieldSizes(mainFieldWidth, mainFieldHeight, maxConditionRowLength, maxConditionColumnLength);
             Cell.SetupDGVs(conditionRows, conditionColumns);
         }
     }
 }