示例#1
0
        public void Solve()
        {
            DLX solver = new DLX();

            foreach (SudokuMove move in SudokuMove.AllMoves()) {
                bool given = (_givens[move.C, move.R] == move.N + 1);

                solver.AddRow(move, given);
            }

            ArrayList answer = solver.Search();

            foreach (object r in answer) {
                SudokuMove move = r as SudokuMove;
                _solution[move.C, move.R] = move.N + 1;
            }
        }
示例#2
0
        public void Solve()
        {
            DLX solver = new DLX();

            foreach (SudokuMove move in SudokuMove.AllMoves()) {
                bool required = _givens[move.X, move.Y] == move.N + 1;
                solver.AddRow(move, required);
            }

            ArrayList answer = solver.Search();

            if (answer != null) {
                foreach (object r in answer) {
                    SudokuMove move = r as SudokuMove;
                    _solution[move.X, move.Y] = move.N + 1;
                }
            }
        }
示例#3
0
        public IEnumerable<int> SolveAll()
        {
            DLX solver = new DLX();

            foreach (SudokuMove move in SudokuMove.AllMoves()) {
                bool required = _givens[move.X, move.Y] == move.N + 1;
                solver.AddRow(move, required);
            }

            foreach (ArrayList answer in solver.EnumerateSolutions()) {
                foreach (object r in answer) {
                    SudokuMove move = r as SudokuMove;
                    _solution[move.X, move.Y] = move.N + 1;
                }

                yield return 1; // hack
            }

            yield break;
        }