private bool FindPath(Board board, CellPath path, Cell origin) { var availableCells = board.GetAvailableCells(origin); foreach (var cell in availableCells) { path.AddCell(cell); //Console.WriteLine(_printingService.ToString(board, path)); if (board.IsSolved()) { return(true); } if (!BoardHasStillSolution(board, cell)) { //Console.WriteLine("Impossible solution, rolling back."); } else { if (FindPath(board, path, cell)) { return(true); } } path.Undo(1); } return(false); }
internal CellPath Solve(Board board) { var path = new CellPath(); path.AddCell(board.Start); FindPath(board, path, board.Start); if (board.IsSolved()) { return(path); } throw new Exception("Impossible problem"); }