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