Пример #1
0
 private bool init()
 {
     if (!isInit)
     {
         var         w   = new Wrapper();
         InitResults res = w.Init("newordersqlmain.database.windows.net", "SALES_TEST", "yoni", "Yy123456789", 1, "admin", "1234");
         if (w.IsEnabled && res == InitResults.Success)
         {
             Text = "Testing version: " + w.Version;
         }
         return(w.IsEnabled);
     }
     return(false);
 }
Пример #2
0
        /// <summary>
        /// Конструктор. Инициализирует экземпляр и выполняет поиск решения задачи
        /// </summary>
        /// <param name="SourceMatrix">Исходная таблица чисел; должна иметь высоту и ширину, равные 9;
        /// из значений извлекаются только младшие разряды; нулевые значения рассматриваются как те, которые нужно найти</param>
        public SudokuSolver(Byte[,] SourceMatrix)
        {
            // Контроль
            if ((SourceMatrix == null) || (SourceMatrix.GetLength(0) != SDS) || (SourceMatrix.GetLength(1) != SDS))
            {
                initResult = InitResults.InitialMatrixIsInvalid;
                return;
            }

            // Инициализация
            for (UInt16 i = 0; i < SDS; i++)
            {
                for (UInt16 j = 0; j < SDS; j++)
                {
                    Byte digit = (Byte)(SourceMatrix[i, j] % 10);
                    if (digit != 0)
                    {
                        Mtx[i, j] = (UInt16)(1 << (digit - 1));
                    }
                    else
                    {
                        Mtx[i, j] = SDS_FULL;
                    }
                }
            }

            ///////////////////////////////////////////////////////////////////////////
            // Подготовка матрицы
            //		Здесь выполняется первый прогон матрицы, предполагающий удаление
            //		из клеток с заданным значением 0x1FF лишних бит. Для этого
            //		проверяются вертикальные и горизонтальные линии, а также квадраты.
            //		Если эта процедура вызывает ошибку в вычислениях, значит, исходные
            //		данные неверны
            if (UpdateMatrix() == -1)
            {
                initResult = InitResults.InitialMatrixIsUnsolvable;
                return;
            }

            ///////////////////////////////////////////////////////////////////////////
            // Метод предположений
            //		Эта процедура начинает выполнять рекурсивные подстановки в
            //		невычисляемые простой прогонкой клетки, т.е., выполнив
            //		предположение о значении какой-то клетки (первой по порядку из
            //		невычисленных), она делает прогонку. Если она не даёт решения,
            //		функция вызывает саму себя, чтобы сделать ещё одно предположение,
            //		и т.д.
            //		Если предположение неверно, функция, обнаружившая это, завершает
            //		работу, давая возможность вызвавшему её экземпляру сделать
            //		другое предположение
            if (!Search())
            {
                initResult = InitResults.NoSolutionsFound;
                return;
            }

            // Успешно. Возврат результата
            resultMatrix = new Byte[SDS, SDS];
            for (UInt16 i = 0; i < SDS; i++)
            {
                for (UInt16 j = 0; j < SDS; j++)
                {
                    resultMatrix[i, j] = (Byte)(Math.Log(Mtx[i, j], 2) + 1);
                }
            }

            initResult = InitResults.OK;
        }