Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int sudoku[9][9];
  4.  
  5. int read() {
  6. for (int y = 0; y < 9; y++) {
  7. for (int x = 0; x < 9; x++) {
  8. scanf("%d", &sudoku[x][y]);
  9. }
  10. }
  11. }
  12.  
  13. int print() {
  14. for (int y = 0; y < 9; y++) {
  15. for (int x = 0; x < 9; x++) {
  16. if (sudoku[x][y])
  17. printf("%d ", sudoku[x][y]);
  18. else
  19. printf(" ");
  20. if (x == 2 || x == 5)
  21. printf("| ");
  22. }
  23. printf("\n");
  24. if (y == 2 || y == 5)
  25. printf("------+-------+------\n");
  26. }
  27. }
  28.  
  29. int valid(int i, int j) {
  30. for (int x = 0; x < 9; x++)
  31. if (x != i && sudoku[i][j] == sudoku[x][j])
  32. return 0;
  33. for (int y = 0; y < 9; y++)
  34. if (y != j && sudoku[i][j] == sudoku[i][y])
  35. return 0;
  36. int cx = i / 3;
  37. int cy = j / 3;
  38. for (int x = 0; x < 3; x++)
  39. for (int y = 0; y < 3; y++)
  40. if (3*cx+x != i && 3*cy+y != j && sudoku[i][j] == sudoku[3*cx+x][3*cy+y])
  41. return 0;
  42. return 1;
  43. }
  44.  
  45. int backtrack(int i, int j) {
  46. if (i == 9 && j == 8)
  47. return 1;
  48. if (i == 9)
  49. return backtrack(0, j+1);
  50. for (int n = 1; n <= 9; n++) {
  51. sudoku[i][j] = n;
  52. if (valid(i, j) && backtrack(i+1, j))
  53. return 1;
  54. sudoku[i][j] = 0;
  55. }
  56. return 0;
  57. }
  58.  
  59. int main() {
  60. read();
  61. print();
  62. printf("\n");
  63. backtrack(0, 0);
  64. print();
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement