Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int sudoku[9][9];
- int read() {
- for (int y = 0; y < 9; y++) {
- for (int x = 0; x < 9; x++) {
- scanf("%d", &sudoku[x][y]);
- }
- }
- }
- int print() {
- for (int y = 0; y < 9; y++) {
- for (int x = 0; x < 9; x++) {
- if (sudoku[x][y])
- printf("%d ", sudoku[x][y]);
- else
- printf(" ");
- if (x == 2 || x == 5)
- printf("| ");
- }
- printf("\n");
- if (y == 2 || y == 5)
- printf("------+-------+------\n");
- }
- }
- int valid(int i, int j) {
- for (int x = 0; x < 9; x++)
- if (x != i && sudoku[i][j] == sudoku[x][j])
- return 0;
- for (int y = 0; y < 9; y++)
- if (y != j && sudoku[i][j] == sudoku[i][y])
- return 0;
- int cx = i / 3;
- int cy = j / 3;
- for (int x = 0; x < 3; x++)
- for (int y = 0; y < 3; y++)
- if (3*cx+x != i && 3*cy+y != j && sudoku[i][j] == sudoku[3*cx+x][3*cy+y])
- return 0;
- return 1;
- }
- int backtrack(int i, int j) {
- if (i == 9 && j == 8)
- return 1;
- if (i == 9)
- return backtrack(0, j+1);
- for (int n = 1; n <= 9; n++) {
- sudoku[i][j] = n;
- if (valid(i, j) && backtrack(i+1, j))
- return 1;
- sudoku[i][j] = 0;
- }
- return 0;
- }
- int main() {
- read();
- print();
- printf("\n");
- backtrack(0, 0);
- print();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement