From ee9f2bed06f2c941851681de89afee02d60bf422 Mon Sep 17 00:00:00 2001 From: p8ltm3pah <2383922408@qq.com> Date: Mon, 6 Nov 2023 21:15:58 +0800 Subject: [PATCH] Add 3 --- 3 | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 3 diff --git a/3 b/3 new file mode 100644 index 0000000..8a92f5e --- /dev/null +++ b/3 @@ -0,0 +1,85 @@ +bool isRowValid(int matrix[9][9], int row) +{ + bool used[10] = { false };//记录数字是否已经使用过 + for (int col = 0; col < 9; col++) + { + if (matrix[row][col] != 0) { + int num = matrix[row][col]; if (used[num]) { + printf("False:Invalid initial Sudoku matrix!\n The number %d is used in the row %d has been used", num, col); + return false;//数字重复出现 + }used[num] = true; + } + }return true; +} +//判断列 +bool isColValid(int matrix[9][9], int col) +{ + bool used[10] = { false };//记录数字是否已经使用过 + for (int row = 0; row < 9; row++) + { + if (matrix[row][col] != 0) { + int num = matrix[row][col]; if (used[num]) { + printf("False:Invalid initial Sudoku matrix!\n The number %d is used in the col %d has been used", num, row); + return false; + }used[num] = true; + } + }return true; +} +//判断子矩阵 +bool isSubMatrixValid(int matrix[9][9], int startRow, int startCol) { + bool used[10] = { false };//记录数字是否已经使用过 + for (int row = startRow; row < startRow + 3; row++) { + for (int col = startCol; col < startCol + 3; col++) { + int num = matrix[row][col]; + if (num != 0) { + if (used[num]) { + int block = (row / 3) + (col / 3); + printf("False:Invalid initial Sudoku matrix!\n The number %d is used in the block %d has been used", num, block); + return false;//数字重复出现 + }used[num] = true; + } + } + }return true; +} +//判断整个矩阵 +bool isSudokuValid(int matrix[9][9]) { + for (int i = 0; i < 9; i++) { + if (!isRowValid(matrix, i) || !isColValid(matrix, i)) { + return false;//行或列 + } + } + for (int i = 0; i < 9; i += 3) { + for (int j = 0; j < 9; j += 3) { + if (!isSubMatrixValid(matrix, i, j)) { + return false;//子矩阵 + } + } + } + printf("True:Valid initial Sudoku matrix!"); + return true; +} +int main() +{ + printf("The original Sudoku matrix:\n"); + int matrix[9][9] = { +{5,3,4,6,7,8,9,1,2}, +{6,7,2,1,9,5,3,4,8}, +{1,9,8,3,4,2,5,6,7}, +{8,5,9,7,6,1,4,2,3}, +{4,2,6,8,5,3,7,9,1}, +{7,1,3,9,2,4,8,5,6}, +{9,6,1,5,3,7,2,8,4}, +{2,8,7,4,1,9,6,3,5}, +{3,4,5,2,8,6,1,7,9} }; + + for (int i = 0; i < 9; i++) + { + for (int j = 0; j < 9; j++) + { + printf("%4d ", matrix[i][j]); + } + printf("\n");//格式化输出 + } + isSudokuValid(matrix); + return 0; +}