parent
2fce80a881
commit
152198a4db
@ -0,0 +1,103 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
void generate_sudoku(int board[9][9]) {
|
||||
srand(time(NULL));
|
||||
int i,j;
|
||||
for (i = 0; i < 9; i++) {
|
||||
for ( j = 0; j < 9; j++) {
|
||||
board[i][j] =rand()%10;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void print_sudoku(int board[9][9]) {
|
||||
int i,j;
|
||||
for ( i = 0; i < 9; i++) {
|
||||
for (j = 0; j < 9; j++) {
|
||||
printf("%d ", board[i][j]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int test(int board[9][9]) {
|
||||
int i,j,k,p,q;
|
||||
for (i = 0; i < 9; i++) {
|
||||
for (j = 0; j < 9; j++) {
|
||||
if (board[i][j] != 0) {
|
||||
for (k = 0; k < 9; k++) {
|
||||
if (k != j && board[i][j] == board[i][k]) {
|
||||
printf("False:Invalid initial Sudoku matrix!\n");
|
||||
printf("The number %d in the col %d has been used!\n", board[i][j], j + 1);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
if (k != i && board[i][j] == board[k][j]) {
|
||||
printf("False:Invalid initial Sudoku matrix!\n");
|
||||
printf("The number %d in the row %d has been used!\n", board[i][j], i + 1);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (p = i / 3 * 3; p < i / 3 * 3 + 3; p++) {
|
||||
for (q = j / 3 * 3; q < j / 3 * 3 + 3; q++) {
|
||||
if ((p != i || q != j) && board[i][j] == board[p][q]) {
|
||||
printf("False:Invalid initial Sudoku matrix!\n");
|
||||
printf("The number %d in the block %d has been used!\n", board[i][j], (p / 3) * 3 + q / 3 + 1);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("True:Valid initial Sudoku matrix!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int add(int board[9][9]) {
|
||||
int row,col,num;
|
||||
for (row = 0; row < 9; row++) {
|
||||
for (col = 0; col < 9; col++) {
|
||||
if (board[row][col] == 0) {
|
||||
for (num = 1; num <= 9; num++) {
|
||||
if (test(board)) {
|
||||
board[row][col] = num;
|
||||
if (add(board)) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
board[row][col] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
int board[9][9];
|
||||
generate_sudoku(board);
|
||||
printf("The original Sudoku matrix:\n");
|
||||
print_sudoku(board);
|
||||
test(board);
|
||||
if (add(board)) {
|
||||
printf("The solution of Sudoku matrix:\n");
|
||||
print_sudoku(board);
|
||||
} else {
|
||||
printf("No solution\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in new issue