From 463b258e938f406224fe1939aeca6df5760d0bba Mon Sep 17 00:00:00 2001 From: phbqmr4vg <1396207559@qq.com> Date: Fri, 3 Nov 2023 18:57:25 +0800 Subject: [PATCH] =?UTF-8?q?Add=201.4=EF=BC=88yi=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.4(yi) | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 1.4(yi) diff --git a/1.4(yi) b/1.4(yi) new file mode 100644 index 0000000..8570406 --- /dev/null +++ b/1.4(yi) @@ -0,0 +1,124 @@ +#include +#include + +bool isValid(int row,int col,int num); +bool solveSudoku(); +void Print(); +void Judge(); +int board[9][9]={ +{5, 2, 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} +}; +int flag=1; + +int main(){ + printf("The original Sudoku matrix: \n"); + Print(); + Judge(); + if(solveSudoku()){ + printf("The solution of Sudoku matrix:\n"); + Print(); + } + else printf("No solution!\n"); + return 0; +} + +void Judge(){ + for(int i=0;i<9;i++){ + for(int j=0;j<9;j++){ + if(board[i][j]){ + int x=i+1,y=j+1; + for(y;y<9;y++){ + if(board[i][j]==board[i][y]){ + printf("False:Invalid initial Sudoku matrix!\n"); + printf("The number %d in the col %d has been used!\n",board[i][j],y+1); + return; + } + } + for(x;x<9;x++){ + if(board[i][j]==board[x][j]){ + printf("False:Invalid initial Sudoku matrix!\n"); + printf("The number %d in the row %d has been used!\n",board[i][j],x+1); + return; + } + } + int a=i/3*3,b=j/3*3; + int m=a*3+b/3+1; + for(int k=0;k<=2;k++){ + for(int l=0;l<=2;l++){ + if(board[a][b]==board[i][j]&&a!=i&&b!=j){ + printf("False:Invalid initial Sudoku matrix!\n"); + printf("The number %d in the block %d has been used!\n",board[i][j],m); + return; + } + b++; + } + a++; + b=j/3*3; + } + } + } + } + printf("True:Valid initial Sudoku matrix!\n"); +} + +bool isValid(int row,int col,int num){ + for(int i=0;i<9;i++){ // 判断行中是否有重复数字 + if(board[row][i]==num){ + return false; + } + } + for(int i=0;i<9;i++){ // 判断列中是否有重复数字 + if (board[i][col]==num){ + return false; + } + } + int startRow=row/3*3; // 判断3x3子矩阵中是否有重复数字 + int startCol=col/3*3; + for(int i=startRow;i