parent
6b48a3068f
commit
020940d788
@ -0,0 +1,4 @@
|
|||||||
|
.DS_Store
|
||||||
|
*.o
|
||||||
|
.vscode
|
||||||
|
SudokuMatrix
|
@ -0,0 +1,23 @@
|
|||||||
|
SudokuMatrix: PrintMatrix.o main.o SudokuMatrix.o RandomMatrix.o JudgeMatrix.o SolveMatrix.o
|
||||||
|
gcc -o SudokuMatrix main.o PrintMatrix.o SudokuMatrix.o RandomMatrix.o JudgeMatrix.o SolveMatrix.o
|
||||||
|
|
||||||
|
main.o: main.c SudokuMatrix.o
|
||||||
|
gcc -c -o main.o main.c
|
||||||
|
|
||||||
|
PrintMatrix.o: PrintMatrix.c SudokuMatrix.o
|
||||||
|
gcc -c -o PrintMatrix.o PrintMatrix.c
|
||||||
|
|
||||||
|
RandomMatrix.o: RandomMatrix.c SudokuMatrix.o
|
||||||
|
gcc -c -o RandomMatrix.o RandomMatrix.c
|
||||||
|
|
||||||
|
JudgeMatrix.o: JudgeMatrix.c SudokuMatrix.o
|
||||||
|
gcc -c -o JudgeMatrix.o JudgeMatrix.c
|
||||||
|
|
||||||
|
SolveMatrix.o: SolveMatrix.c SudokuMatrix.o
|
||||||
|
gcc -c -o SolveMatrix.o SolveMatrix.c
|
||||||
|
|
||||||
|
SudokuMatrix.o : SudokuMatrix.h SudokuMatrix.c
|
||||||
|
gcc -c -o SudokuMatrix.o SudokuMatrix.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf *.o SudokuMatrix
|
@ -0,0 +1,21 @@
|
|||||||
|
#include "SudokuMatrix.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
void PrintMatrix(SudokuMatrix *matrix){
|
||||||
|
for (int i=0;i<9;i++){
|
||||||
|
if (i == 0 || i == 3 || i == 6){
|
||||||
|
printf("|-----------------------------|\n");
|
||||||
|
}
|
||||||
|
for (int j=0;j<9;j++){
|
||||||
|
if (j == 0 || j == 3 || j == 6){
|
||||||
|
printf("|");
|
||||||
|
}
|
||||||
|
printf(" %d ",matrix->matrix[i][j]);
|
||||||
|
}
|
||||||
|
// 打印最后一列的竖线
|
||||||
|
printf("|\n");
|
||||||
|
}
|
||||||
|
// 打印尾巴那行
|
||||||
|
printf("|-----------------------------|\n");
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
#include "SudokuMatrix.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 交换两个整数的值
|
||||||
|
*
|
||||||
|
* @param a 一个整数的地址
|
||||||
|
* @param b 另一个整数的地址
|
||||||
|
*/
|
||||||
|
void Swap(int*a, int *b){
|
||||||
|
int temp = *a;
|
||||||
|
*a = *b;
|
||||||
|
*b = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 将一个 int 数组的内容随机打乱
|
||||||
|
*
|
||||||
|
* @param array 需要打乱的数组
|
||||||
|
* @param length 数组的长度
|
||||||
|
*/
|
||||||
|
void Shuffle(int* array, int length){
|
||||||
|
if (length != 0){
|
||||||
|
for (int i = length - 1; i > 0; i--) {
|
||||||
|
int j = rand() % (i + 1);
|
||||||
|
Swap(&array[i], &array[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void RandomMatrix(SudokuMatrix* matrix){
|
||||||
|
int random_row[9] = {1,2,3,4,5,6,7,8,9};
|
||||||
|
int random_place[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
|
||||||
|
|
||||||
|
// 重置矩阵内容为全0
|
||||||
|
for (int i=0;i<9;i++){
|
||||||
|
for (int j=0;j<9;j++){
|
||||||
|
matrix->matrix[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0;i<3;i++){
|
||||||
|
// 先生成这九个数的顺序,再随机生成这九个数应该在哪里。
|
||||||
|
Shuffle(random_row,9);
|
||||||
|
for (int j=0;j<3;j++){
|
||||||
|
Shuffle(random_place,9);
|
||||||
|
for (int k=0;k<3;k++){
|
||||||
|
matrix->matrix[i*3+j][random_place[k]] = random_row[j*3+k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
#include "SudokuMatrix.h"
|
||||||
|
|
||||||
|
SudokuMatrix* CreateMatrix(){
|
||||||
|
SudokuMatrix *matrix = (SudokuMatrix*)malloc(sizeof(SudokuMatrix));
|
||||||
|
// 初始化这个数组里的数为0
|
||||||
|
for (int i=0;i<9;i++){
|
||||||
|
for (int j=0;j<9;j++){
|
||||||
|
matrix->matrix[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return matrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
SudokuMatrix* CreateMatrixFromArray(int matrix[9][9]){
|
||||||
|
SudokuMatrix *newMatrix = CreateMatrix();
|
||||||
|
// 拷贝内部的数组为输入的数组
|
||||||
|
for(int i=0; i<9; i++){
|
||||||
|
for(int j=0; j<9; j++){
|
||||||
|
newMatrix->matrix[i][j] = matrix[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeleteMatrix(SudokuMatrix *matrix){
|
||||||
|
// 释放整个结构体
|
||||||
|
if (matrix != NULL)
|
||||||
|
{
|
||||||
|
free(matrix);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
#include "SudokuMatrix.h"
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 测试随机生成数独矩阵
|
||||||
|
*/
|
||||||
|
void testRandomMatrix(){
|
||||||
|
SudokuMatrix* matrix = CreateMatrix();
|
||||||
|
RandomMatrix(matrix);
|
||||||
|
PrintMatrix(matrix);
|
||||||
|
DeleteMatrix(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 测试判断数独矩阵的函数
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void testJudgeMatrix(){
|
||||||
|
SudokuMatrix* matrix = CreateMatrix();
|
||||||
|
RandomMatrix(matrix);
|
||||||
|
JudgeMatrix(matrix);
|
||||||
|
DeleteMatrix(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 测试求解数独矩阵的函数
|
||||||
|
*
|
||||||
|
* @param matrix_used 0: board0; 1: board1; 2: board2
|
||||||
|
*/
|
||||||
|
void testSolveMatrix(int matrix_used){
|
||||||
|
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}};
|
||||||
|
|
||||||
|
SudokuMatrix* matrix;
|
||||||
|
switch (matrix_used){
|
||||||
|
case 0:
|
||||||
|
matrix = CreateMatrixFromArray(board0);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
matrix = CreateMatrixFromArray(board1);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
matrix = CreateMatrixFromArray(board2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SudokuMatrix* result = CreateMatrix();
|
||||||
|
SolveMatrix(matrix, result);
|
||||||
|
DeleteMatrix(matrix);
|
||||||
|
DeleteMatrix(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
// 初始化随机数种子
|
||||||
|
srand(time(NULL));
|
||||||
|
// 自选你要调用(用来测试)的函数
|
||||||
|
testSolveMatrix(0);
|
||||||
|
}
|
Loading…
Reference in new issue