diff --git a/3.txt b/3.txt new file mode 100644 index 0000000..f2debaa --- /dev/null +++ b/3.txt @@ -0,0 +1,93 @@ +#include +#include +#include + +int check(int sudoku[9][9]) { + int w[9], c[9], b[9]; + + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + w[j] = 0; + c[j] = 0; + b[j] = 0; + } + + for (int j = 0; j < 9; j++) { + int k = sudoku[i][j]; + + if (k == 0) continue; + if (w[k - 1] == 1) return 0; + w[k - 1] = 1; + + k = sudoku[j][i]; + + if (k == 0) continue; + if (c[k - 1] == 1) return 0; + c[k - 1] = 1; + + k = sudoku[(i / 3) * 3 + j / 3][(i % 3) * 3 + j % 3]; + + if (k == 0) continue; + if (b[k - 1] == 1) return 0; + b[k - 1] = 1; + } + } + + return 1; +} + +int main() { + int a[9][9] = { 0 }; + int i, j, k; + + printf("The original Sudoku matrix:\n"); + srand(time(NULL)); + printf("|-------------------|\n"); + + for (i = 0; i < 9; i++) { + for (j = 0; j < 9; j++) { + if (j % 3 == 0) printf("|"); + + if (rand() % 3 == 0) { + do { + k = rand() % 9 + 1; + } while (a[i][k - 1] != 0); + + a[i][k - 1] = k; + printf("%d", k); + } + else { + a[i][j] = 0; + printf("."); + } + + if (j == 8) printf("|"); + printf(" "); + } + + if ((i + 1) % 3 == 0) printf("\n|-------------------|"); + printf("\n"); + } + + if (check(a)) + printf("True: Valid initial Sudoku matrix!\n"); + else { + printf("False: Invalid initial Sudoku matrix!\n"); + for (i = 0; i < 9; i++) { + for (j = i + 1; j < 9; j++) { + for (k = i / 3 * 3; k < i / 3 * 3 + 3; k++) { + for (int l = i % 3 * 3; l < i % 3 * 3 + 3; l++) { + if ((a[i][j] != 0 && a[i][j] == a[k][l]) || + (a[j][i] != 0 && a[j][i] == a[l][k])) { + printf("The number %d in the row %d has been used!\n", a[i][j], i + 1); + goto end; + } + } + } + } + } + end:; + } + + return EXIT_SUCCESS; +}