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