From 0b627207fad88bd9af70abb3db3d632fc563a9b2 Mon Sep 17 00:00:00 2001 From: psoyatper Date: Sun, 29 Oct 2023 12:48:43 +0800 Subject: [PATCH] ADD file via upload --- check.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 check.c diff --git a/check.c b/check.c new file mode 100644 index 0000000..38b86a4 --- /dev/null +++ b/check.c @@ -0,0 +1,112 @@ +#include +#include +#include +#include + +void output(int board[9][9]){ + int i; + for(i = 0;i < 9 ;i++){ + if(i %3 == 0){ + printf("|-----------------------|\n"); + } + printf("| %d %d %d | %d %d %d | %d %d %d |\n", + board[i][0],board[i][1],board[i][2],board[i][3],board[i][4],board[i][5],board[i][6],board[i][7],board[i][8]); + } + printf("|-----------------------|\n"); +} + + + +void shuffleArray(int array[], int size) { + for (int i = size - 1; i > 0; i--) { + int j = rand() % (i + 1); + int temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } +} + + +void create(int board[9][9]){ + srand(time(NULL)); + int index = 0; + for (int r = 0; r < 9; r+=3){ + int nums[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + shuffleArray(nums, 9); + for (int i = r; i < r+3; i++) { + for (int j = 0; j < 9; j += 3) { + board[i][j] = nums[index++]; + if (index >= 9) { + index = 0; + } + } + } + } + for(int j = 0;j < 9;j++){ + shuffleArray(board[j], 9); + } +} + + +void check(int matrix[9][9]) { + + for (int i = 0; i < 9; i++) { + int count[10] = {0}; + for (int j = 0; j < 9; j++) { + int num = matrix[i][j]; + if (num != 0) { + count[num]++; + if (count[num] > 1) { + printf("False: The number %d in the row %d has been used!\n", num, i + 1); + return; + } + } + } + } + + + for (int j = 0; j < 9; j++) { + int count[10] = {0}; + for (int i = 0; i < 9; i++) { + int num = matrix[i][j]; + if (num != 0) { + count[num]++; + if (count[num] > 1) { + printf("False: The number %d in the col %d has been used!\n", num, j + 1); + return; + } + } + } + } + + for (int block = 0; block < 9; block++) { + int count[10] = {0}; + int startRow = (block / 3) * 3; + int startCol = (block % 3) * 3; + for (int i = startRow; i < startRow + 3; i++) { + for (int j = startCol; j < startCol + 3; j++) { + int num = matrix[i][j]; + if (num != 0) { + count[num]++; + if (count[num] > 1) { + printf("False: The number %d in the block %d has been used!\n", num, block + 1); + return; + } + } + } + } + } + + printf("True: Valid initial Sudoku matrix!\n"); +} + +int main() { + + int matrix[9][9] = {0}; + create(matrix); + printf("The original Sudoku matrix: \n"); + output(matrix); + check(matrix); + + return 0; +} \ No newline at end of file