You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.6 KiB

#include <stdio.h>
#include <stdbool.h>
#define SIZE 9
bool isValidSudoku(int matrix[SIZE][SIZE]);
void printMatrix(int matrix[SIZE][SIZE]);
int main() {
int matrix[SIZE][SIZE] = {
{5, 3, 0, 0, 7, 0, 0, 0, 0},
{6, 0, 0, 1, 9, 5, 0, 0, 0},
{0, 9, 8, 0, 0, 0, 0, 6, 0},
{8, 0, 0, 0, 6, 0, 0, 0, 3},
{4, 0, 0, 8, 0, 3, 0, 0, 1},
{7, 0, 0, 0, 2, 0, 0, 0, 6},
{0, 6, 0, 0, 0, 0, 2, 8, 0},
{0, 0, 0, 4, 1, 9, 0, 0, 5},
{0, 0, 0, 0, 8, 0, 0, 7, 9}
};
printf("The original Sudoku matrix: \n");
printMatrix(matrix);
if (isValidSudoku(matrix)) {
printf("True: Valid initial Sudoku matrix!\n");
} else {
printf("False: Invalid initial Sudoku matrix!\n");
}
return 0;
}
bool isValidSudoku(int matrix[SIZE][SIZE]) {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (matrix[i][j] != 0) {
for (int k = j + 1; k < SIZE; k++) {
if (matrix[i][k] == matrix[i][j] && matrix[i][k] != 0) {
printf("The number %d in the col %d has been used!\n", matrix[i][j], j + 1);
return false;
}
}
for (int k = i + 1; k < SIZE; k++) {
if (matrix[k][j] == matrix[i][j] && matrix[k][j] != 0) {
printf("The number %d in the row %d has been used!\n", matrix[i][j], i + 1);
return false;
}
}
// Check 3x3 block
int blockRow = i - i % 3;
int blockCol = j - j % 3;
for (int p = 0; p < 3; p++) {
for (int q = 0; q < 3; q++) {
if (matrix[blockRow + p][blockCol + q] == matrix[i][j] &&
matrix[blockRow + p][blockCol + q] != 0 &&
(blockRow + p != i || blockCol + q != j)) {
printf("The number %d in the block %d has been used!\n", matrix[i][j], (i / 3) * 3 + j / 3 + 1);
return false;
}
}
}
}
}
}
return true;
}
void printMatrix(int matrix[SIZE][SIZE]) {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
printf("%c ", matrix[i][j] != 0 ? '1' + matrix[i][j] - 1 : '.');
if (j % 3 == 2 && j != SIZE - 1) printf("| ");
}
if (i % 3 == 2 && i != SIZE - 1) printf("\n---------------------\n");
else if (i != SIZE - 1) printf("\n");
}
}