From 7ad583ac20757b8bd6efb8d33cac37d642b837e2 Mon Sep 17 00:00:00 2001 From: pjc97uv2f <1291955673@qq.com> Date: Sat, 9 Nov 2024 01:10:30 +0800 Subject: [PATCH] =?UTF-8?q?Add=20=E7=AC=AC=E5=9B=9B=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 第四题 | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 第四题 diff --git a/第四题 b/第四题 new file mode 100644 index 0000000..13c223f --- /dev/null +++ b/第四题 @@ -0,0 +1,160 @@ +#include +#include +bool checkRow(const char board[9][9], int row, char num) { +for (int col = 0; col < 9; col++) { +if (board[row][col] == num) { +return false; +} +} +return true; +} +bool checkCol(const char board[9][9], int col, char num) { +for (int row = 0; row < 9; row++) { +if (board[row][col] == num) { +return false; +} +} +return true; +} +bool checkBox(const char board[9][9], int startRow, int startCol, char num) { +for (int row = 0; row < 3; row++) { +for (int col = 0; col < 3; col++) { +if (board[row + startRow][col + startCol] == num) { +return false; +} +} +} +return true; +} +bool isValidSudoku(const char board[9][9]) { +for (int row = 0; row < 9; row++) { +for (int col = 0; col < 9; col++) { +if (board[row][col]!= '.') { +char num = board[row][col]; +if (!checkRow(board, row, num) || +!checkCol(board, col, num) || +!checkBox(board, row - row % 3, col - col % 3, num)) { +return false; +} +} +} +} +return true; +} +bool findEmptyCell(const char board[9][9], int *row, int *col) { +for (*row = 0; *row < 9; (*row)++) { +for (*col = 0; *col < 9; (*col)++) { +if (board[*row][*col] == '.') { +return true; +} +} +} +return false; +} +bool solveSudoku(char board[9][9]) { +int row, col; +if (!findEmptyCell(board, &row, &col)) { +return true; +} + +for (char num = '1'; num <= '9'; num++) { +if (checkRow(board, row, num) && +checkCol(board, col, num) && +checkBox(board, row - row % 3, col - col % 3, num)) { +board[row][col] = num; +if (solveSudoku(board)) { +return true; +} +board[row][col] = '.'; +} +} + +return false; +} +void printSudokuMatrix(const char board[9][9]) { +for (int i = 0; i < 9; i++) { +for (int j = 0; j < 9; j++) { +printf("%c ", board[i][j]); +} +printf("\n"); +} +} +int main() { +char board0[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'} +}; +char board1[9][9] = { +{'8', '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'} +}; +char board2[9][9] = { +{'5', '2', '.', '.', '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("原始数独矩阵:\n"); +printSudokuMatrix(board0); + +if (isValidSudoku(board0)) { +printf("是数独矩阵\n"); +if (solveSudoku(board0)) { +printf("数独矩阵的解是: \n"); +printSudokuMatrix(board0); +} else { +printf("无解\n"); +} +} else { +printf("不是数独矩阵\n"); +printf("无解\n"); +} +printf("原始数独矩阵:\n"); +printSudokuMatrix(board1); +if (isValidSudoku(board1)) { +printf("是数独矩阵\n"); +if (solveSudoku(board1)) { +printf("数独矩阵的解是: \n"); +printSudokuMatrix(board1); +} else { +printf("无解\n"); +} +} else { +printf("不是数独矩阵\n"); +printf("无解\n"); +} +printf("原始数独矩阵: \n"); +printSudokuMatrix(board2); +if (isValidSudoku(board2)) { +printf("是数独矩阵\n"); +if (solveSudoku(board2)) { +printf("数独矩阵的解是: \n"); +printSudokuMatrix(board2); +} else { +printf("无解\n"); +} +} else { +printf("不是数独矩阵\n"); +printf("无解\n"); +} +return 0; +} \ No newline at end of file