diff --git a/T4new.cpp b/T4new.cpp new file mode 100644 index 0000000..cc421bd --- /dev/null +++ b/T4new.cpp @@ -0,0 +1,111 @@ +#include +#include +#define N 9 +void printSudoku(int sudoku[9][9]) { + printf("+-------+-------+-------+\n"); + for (int i = 0; i < 9; i++) { + if (i > 0 && i % 3 == 0) { + printf("+-------+-------+-------+\n"); + } + for (int j = 0; j < 9; j++) { + if (j % 3 == 0) { + printf("| "); + } + printf("%d ", sudoku[i][j]); // 输出数组中的元素 + } + printf("|\n"); + } + printf("+-------+-------+-------+\n"); +} +// Function to check if a number is already present in the row +bool isSafeRow(int board[N][N], int row, int num) { + for (int col = 0; col < N; col++) { + if (board[row][col] == num) { + return false; + } + } + return true; +} +// Function to check if a number is already present in the column +bool isSafeCol(int board[N][N], int col, int num) { + for (int row = 0; row < N; row++) { + if (board[row][col] == num) { + return false; + } + } + return true; +} +// Function to check if a number is already present in the 3x3 grid +bool isSafeGrid(int board[N][N], int row, int col, int num) { + int startRow = row - (row % 3); + int startCol = col - (col % 3); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (board[i + startRow][j + startCol] == num) { + return false; + } + } + } + return true; +} +bool isSafe(int board[N][N], int row, int col, int num) { + return isSafeRow(board, row, num) && isSafeCol(board, col, num) && isSafeGrid(board, row, col, num); +} +bool solveSudoku(int board[N][N]) { + int row = -1; + int col = -1; + bool isEmpty = true; + // Find an empty cell + for (int i = 0; i < N && isEmpty; i++) { + for (int j = 0; j < N && isEmpty; j++) { + if (board[i][j] == 0) { + row = i; + col = j; + isEmpty = false; + } + } + } + if (isEmpty) { + return true; + } + for (int num = 1; num <= N; num++) { + if (isSafe(board, row, col, num)) { + board[row][col] = num; + + if (solveSudoku(board)) { + return true; + } + + board[row][col] = 0; + } + } return false; +} +int main() { + int sudoku[N][N] = {{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"); + printSudoku(sudoku); + bool valid = solveSudoku(sudoku); + if (valid) { + printf("True: Valid initial Sudoku matrix!\n"); + + if (solveSudoku(sudoku)) { + printf("The solution of Sudoku matrix:\n"); + printSudoku(sudoku); + } else { + printf("No solution!\n"); + } + } else { + printf("False: Invalid initial Sudoku matrix!\n"); + printf("No solution!\n"); + } + return 0; +}