Example #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());
                }
            }
        }
Example #2
0
        internal CloneOfStaticsOfRowOrColumnToBeCalculated(RowOrColumnToBeCalculated[] rowOrColumnToBeCalculated, int index)
        {
            isMainFieldFilled = RowOrColumnToBeCalculated.IsMainFieldFilled;
            totalFilledCells  = RowOrColumnToBeCalculated.TotalFilledCells;
            mainField         = new Cell[RowOrColumnToBeCalculated.RowsCount, RowOrColumnToBeCalculated.ColumnsCount];
            mainField         = RowOrColumnToBeCalculated.CloneMainField();
            possibleSolutions = new List <bool[]>();

            cloneRowOrColumnToBeCalculated = new RowOrColumnToBeCalculated[RowOrColumnToBeCalculated.RowsCount + RowOrColumnToBeCalculated.ColumnsCount];

            RowOrColumnToBeCalculated.CloneArray(rowOrColumnToBeCalculated, cloneRowOrColumnToBeCalculated);
        }