From b953453448be811955ea9bcccfbfa898cf0d6d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E4=B8=96=E6=B3=A2?= <2783626707@qq.com> Date: Sat, 21 Oct 2023 21:46:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D3=E4=B8=AA=E4=BB=BB=E5=8A=A1=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checkMatrix.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ fillMatrix.c | 44 +++++++++++++++++++++++++++++++++ myMatrix.h | 7 ++++++ outPut.c | 31 ++++++++++++++++++++++++ randomInit.c | 38 +++++++++++++++++++++++++++++ 5 files changed, 187 insertions(+) create mode 100644 checkMatrix.c create mode 100644 fillMatrix.c create mode 100644 myMatrix.h create mode 100644 outPut.c create mode 100644 randomInit.c diff --git a/checkMatrix.c b/checkMatrix.c new file mode 100644 index 0000000..15c74a9 --- /dev/null +++ b/checkMatrix.c @@ -0,0 +1,67 @@ +#include "myMatrix.h" + +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; +} + +// 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}}; + +// printf("The original Sudoku matrix: \n"); +// matrixOutput(board1); +// checkMatrix(board1,1); +// return 0; +// } \ No newline at end of file diff --git a/fillMatrix.c b/fillMatrix.c new file mode 100644 index 0000000..d0e973b --- /dev/null +++ b/fillMatrix.c @@ -0,0 +1,44 @@ +#include "myMatrix.h" + +int fillMatrix(){ + //todo +} + +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(board1); + if(checkMatrix(board1,1)){ + fillMatrix(); + }else{ + printf("\nNo solution!"); + } + return 0; +} \ No newline at end of file diff --git a/myMatrix.h b/myMatrix.h new file mode 100644 index 0000000..e22d2c9 --- /dev/null +++ b/myMatrix.h @@ -0,0 +1,7 @@ +#include +#include +#include + +void matrixOutput(int matrixArr[9][9]); +void matrixRandomInit(int matrixArr[9][9]); +int checkMatrix(int matrixArr[9][9], int isPrintInfo); \ No newline at end of file diff --git a/outPut.c b/outPut.c new file mode 100644 index 0000000..5ac757b --- /dev/null +++ b/outPut.c @@ -0,0 +1,31 @@ +#include "myMatrix.h" + +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 main() +// { +// int board[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}}; +// matrixOutput(board); +// return 0; +// } \ No newline at end of file diff --git a/randomInit.c b/randomInit.c new file mode 100644 index 0000000..1f98a5a --- /dev/null +++ b/randomInit.c @@ -0,0 +1,38 @@ +#include "myMatrix.h" + +void matrixRandomInit(int matrixArr[9][9]){ + int map[9] = {1,2,3,4,5,6,7,8,9}; + int mp; + srand(time(NULL)); + for(int i=0;i<9;i++){ + for(int j=0;j<9;j++){ + matrixArr[i][j] = 0; + } + } + for(int i=0;i<9;i++){ + if(i%3==0){ + mp=0; + for(int j=0;j<8;j++){ + int n = i+rand()%(8-i); + int tmp = map[i]; + map[i] = map[n]; + map[n]=tmp; + } + } + int k=0; + while(k<3){ + int tmpP = rand()%9; + if(matrixArr[i][tmpP]==0){ + matrixArr[i][tmpP] = map[mp++]; + k++; + } + } + } +} + +int main(){ + int board[9][9]; + matrixRandomInit(board); + matrixOutput(board); + return 0; +} \ No newline at end of file