#include #include #include 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; }