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