16 for (
int r = 0; r < N; ++r) {
17 for (
int c = 0; c < N; ++c) {
18 int val = board[r][c];
19 if (val != 0 && (val < 1 || val > N)) {
26 auto has_duplicates = [](
const std::vector<int>& nums) {
27 std::vector<int> filtered;
28 std::copy_if(nums.begin(), nums.end(), std::back_inserter(filtered),
29 [](
int x) { return x != 0; });
30 std::sort(filtered.begin(), filtered.end());
31 return std::adjacent_find(filtered.begin(), filtered.end()) != filtered.end();
35 for (
int r = 0; r < N; ++r) {
37 for (
int c = 0; c < N; ++c) {
38 row.push_back(board[r][c]);
40 if (has_duplicates(row))
return false;
44 for (
int c = 0; c < N; ++c) {
46 for (
int r = 0; r < N; ++r) {
47 col.push_back(board[r][c]);
49 if (has_duplicates(col))
return false;
54 for (
int br = 0; br < N; br += block_size) {
55 for (
int bc = 0; bc < N; bc += block_size) {
56 std::vector<int> block;
57 for (
int r = br; r < br + block_size; ++r) {
58 for (
int c = bc; c < bc + block_size; ++c) {
59 block.push_back(board[r][c]);
62 if (has_duplicates(block))
return false;
constexpr size_t constexpr_sqrt(size_t n)
Вычисление целочисленного квадратного корня на этапе компиляции
Определения sudoku_solver.h:13
bool is_valid_sudoku(const std::array< std::array< int, N >, N > &board)
Определения test_utils.h:14