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); } } }