#include #include void print_sudoku(char sudoku[9][9]) { for (int i = 0; i < 9; i++) { if (i % 3 == 0 && i != 0) { printf("-------------------------\n"); } for (int j = 0; j < 9; j++) { if (j % 3 == 0 && j != 0) { printf("| "); } printf("%c ", sudoku[i][j]); } printf("\n"); } } bool is_valid_sudoku(char sudoku[9][9]) { // Check rows for (int i = 0; i < 9; i++) { int seen[9] = { 0 }; for (int j = 0; j < 9; j++) { if (sudoku[i][j] != '.' && seen[sudoku[i][j] - '1'] == 1) { printf("False: Invalid initial Sudoku matrix! The number %c in row %d has been used!\n", sudoku[i][j], i + 1); return false; } seen[sudoku[i][j] - '1'] = 1; } } // Check columns for (int j = 0; j < 9; j++) { int seen[9] = { 0 }; for (int i = 0; i < 9; i++) { if (sudoku[i][j] != '.' && seen[sudoku[i][j] - '1'] == 1) { printf("False: Invalid initial Sudoku matrix! The number %c in col %d has been used!\n", sudoku[i][j], j + 1); return false; } seen[sudoku[i][j] - '1'] = 1; } } // Check 3x3 blocks for (int block = 0; block < 9; block++) { int seen[9] = { 0 }; for (int i = block / 3 * 3; i < block / 3 * 3 + 3; i++) { for (int j = block % 3 * 3; j < block % 3 * 3 + 3; j++) { if (sudoku[i][j] != '.' && seen[sudoku[i][j] - '1'] == 1) { printf("False: Invalid initial Sudoku matrix! The number %c in block %d has been used!\n", sudoku[i][j], block + 1); return false; } seen[sudoku[i][j] - '1'] = 1; } } } printf("True: Valid initial Sudoku matrix!\n"); return true; } int main() { char sudoku_board[9][9] = { {'5', '3', '.', '.', '7', '.', '.', '.', '.'}, {'6', '.', '.', '1', '9', '5', '.', '.', '.'}, {'.', '9', '8', '.', '.', '.', '.', '6', '.'}, {'8', '.', '.', '.', '6', '.', '.', '.', '3'}, {'4', '.', '.', '8', '.', '3', '.', '.', '1'}, {'7', '.', '.', '.', '2', '.', '.', '.', '6'}, {'.', '6', '.', '.', '.', '.', '2', '8', '.'}, {'.', '.', '.', '4', '1', '9', '.', '.', '5'}, {'.', '.', '.', '.', '8', '.', '.', '7', '9'} }; printf("The original Sudoku matrix: \n"); print_sudoku(sudoku_board); is_valid_sudoku(sudoku_board); return 0; }