Пример #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 void Solve()
        {
            DLX solver = new DLX(); // one column per cell for leaving, one for arriving; and one special cell for start; one special cell for end

            foreach (ChessMove move in ChessMove.AllKnightsMoves()) {
                move.Mark(solver);
            }

            ArrayList answer = solver.Search();

            if (answer != null) {
                Dictionary<int, ChessMove> bysource = new Dictionary<int, ChessMove>();
                Dictionary<int, ChessMove> bydest = new Dictionary<int, ChessMove>();

                Console.Clear();
                foreach (object r in answer) {
                    ChessMove move = r as ChessMove;

                    bysource[move.C1] = move;
                    bydest[move.C2] = move;
                }

                int start = ChessMove.OffTheBoard;
                int cell = start;

                List<ChessMove> moves = new List<ChessMove>();

                while (true) {
                    ChessMove move = bysource[cell];
                    moves.Add(move);
                    cell = move.C2;

                    if (cell == start) {
                        break;
                    }
                }

                Console.WriteLine("Moves in cycle:");
                Console.WriteLine(moves.Count);
                Console.ReadKey();

                _solution = moves;
            }
        }