From 5a3a26d966cd90474b7da574e40950a8ddc5ef70 Mon Sep 17 00:00:00 2001 From: m7wzyfpis <1040766652@qq.com> Date: Sun, 5 Nov 2023 09:49:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.cpp | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 4.cpp diff --git a/4.cpp b/4.cpp new file mode 100644 index 0000000..ed81d29 --- /dev/null +++ b/4.cpp @@ -0,0 +1,130 @@ +#include +#include +#include + +int checkMatrix(int matrixArr[9][9], int isPrintInfo){ + int rowCnt[9][10]={0}; + int colCnt[9][10]={0}; + int bloCnt[9][10]={0}; + for(int i=0;i<9;i++){ + for(int j=0;j<9;j++){ + if(matrixArr[i][j]!=0){ + rowCnt[i][matrixArr[i][j]]++; + if(rowCnt[i][matrixArr[i][j]]>1){ + if(isPrintInfo){ + printf("\nFalse:Invalid initial Sudoku matrix!"); + printf("\nThe number %d in the row %d has been used!",matrixArr[i][j],i+1); + } + return 0; + } + colCnt[j][matrixArr[i][j]]++; + if(colCnt[j][matrixArr[i][j]]>1){ + if(isPrintInfo){ + printf("\nFalse:Invalid initial Sudoku matrix!"); + printf("\nThe number %d in the col %d has been used!",matrixArr[i][j],j+1); + } + return 0; + } + bloCnt[i/3*3+j/3][matrixArr[i][j]]++; + if(bloCnt[i/3*3+j/3][matrixArr[i][j]]>1){ + if(isPrintInfo){ + printf("\nFalse:Invalid initial Sudoku matrix!"); + printf("\nThe number %d in the block %d has been used!",matrixArr[i][j],i/3*3+j/3+1); + } + return 0; + } + } + } + } + if(isPrintInfo){ + printf("\nTrue:Valid initial Sudoku matrix!"); + } + return 1; +} +void matrixOutput(int matrixArr[9][9]) +{ + for (int i = 0; i < 9; i++) + { + for (int j = 0; j < 9; j++) + { + printf("%d", matrixArr[i][j]); + if (j != 8) + printf(" "); + } + if (i != 8) + printf("\n"); + } +} +int fillMatrix(int matrixArr[9][9], int row, int col){ + if(row==9){ + return 1; + } + if(col==9){ + return fillMatrix(matrixArr,row+1,0); + } + if(matrixArr[row][col]!=0){ + return fillMatrix(matrixArr, row, col+1); + } + for(int i=1;i<=9;i++){ + matrixArr[row][col]=i; + if(checkMatrix(matrixArr,0)){ + if(fillMatrix(matrixArr,row,col+1)){ + return 1; + } + matrixArr[row][col]=0; + }else{ + matrixArr[row][col]=0; + } + } + return 0; +} + +int main() +{ + int board0[9][9] = {{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}}; + int board1[9][9] = {{8, 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}}; + int board2[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}}; + printf("The original Sudoku matrix: \n"); + matrixOutput(board0); + if (checkMatrix(board0, 1)) + { + if (fillMatrix(board0, 0, 0)) + { + printf("\nThe solution of Sudoku matrix:\n"); + matrixOutput(board0); + } + else + { + printf("\nNo solution!"); + } + } + else + { + printf("\nNo solution!"); + } + return 0; +}