8 for (
int r = 0; r < N; ++r) {
9 for (
int c = 0; c < N; ++c) {
10 int val = board[r][c];
11 if (val != 0 && (val < 1 || val > N)) {
18 auto has_duplicates = [](
const std::vector<int>& nums) {
22 if (seen.count(x))
return true;
30 for (
int r = 0; r < N; ++r) {
32 for (
int c = 0; c < N; ++c) {
33 row.push_back(board[r][c]);
35 if (has_duplicates(row))
return false;
39 for (
int c = 0; c < N; ++c) {
41 for (
int r = 0; r < N; ++r) {
42 col.push_back(board[r][c]);
44 if (has_duplicates(col))
return false;
49 for (
int br = 0; br < N; br += block_size) {
50 for (
int bc = 0; bc < N; bc += block_size) {
51 std::vector<int> block;
52 for (
int r = br; r < br + block_size; ++r) {
53 for (
int c = bc; c < bc + block_size; ++c) {
54 block.push_back(board[r][c]);
57 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_sudoku_utils.h:6