Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. struct frecventa
  8. {
  9. bool lin;
  10. bool col;
  11. bool sq;
  12. } fr[10];
  13.  
  14. struct zero
  15. {
  16. int x;
  17. int y;
  18. } z[82];
  19.  
  20. int sudoku[10][10], k;
  21.  
  22. void clr()
  23. {
  24. for(int i=1; i<=9; i++)
  25. fr[i].lin=fr[i].col=fr[i].sq=false;
  26. }
  27.  
  28. void afis()
  29. {
  30. for(int i=1; i<=9; i++)
  31. {
  32. for(int j=1; j<=9; j++)
  33. cout<<sudoku[i][j]<<" ";
  34. cout<<endl;
  35. }
  36. }
  37.  
  38. void frcv(int x0, int y0){
  39. for(int i=1; i<=9; i++)
  40. {
  41. fr[sudoku[i][y0]].col=true;
  42. fr[sudoku[x0][i]].lin=true;
  43. }
  44. int square;
  45. if(x0%3!=0)
  46. square=(x0/3)*3+y0/3;
  47. else
  48. square=(x0/3-1)*3+y0/3;
  49. if(y0%3!=0)
  50. square++;
  51. switch(square)
  52. {
  53. case 1:
  54. {
  55. for(int ii=1; ii<=3; ii++)
  56. for(int jj=1; jj<=3; jj++)
  57. fr[sudoku[ii][jj]].sq=true;
  58. break;
  59. }
  60. case 2:
  61. {
  62. for(int ii=1; ii<=3; ii++)
  63. for(int jj=4; jj<=6; jj++)
  64. fr[sudoku[ii][jj]].sq=true;
  65. break;
  66. }
  67. case 3:
  68. {
  69. for(int ii=1; ii<=3; ii++)
  70. for(int jj=7; jj<=9; jj++)
  71. fr[sudoku[ii][jj]].sq=true;
  72. break;
  73. }
  74. case 4:
  75. {
  76. for(int ii=4; ii<=6; ii++)
  77. for(int jj=1; jj<=3; jj++)
  78. fr[sudoku[ii][jj]].sq=true;
  79. break;
  80. }
  81. case 5:
  82. {
  83. for(int ii=4; ii<=6; ii++)
  84. for(int jj=4; jj<=6; jj++)
  85. fr[sudoku[ii][jj]].sq=true;
  86. break;
  87. }
  88. case 6:
  89. {
  90. for(int ii=4; ii<=6; ii++)
  91. for(int jj=7; jj<=9; jj++)
  92. fr[sudoku[ii][jj]].sq=true;
  93. break;
  94. }
  95. case 7:
  96. {
  97. for(int ii=7; ii<=9; ii++)
  98. for(int jj=1; jj<=3; jj++)
  99. fr[sudoku[ii][jj]].sq=true;
  100. break;
  101. }
  102. case 8:
  103. {
  104. for(int ii=7; ii<=9; ii++)
  105. for(int jj=4; jj<=6; jj++)
  106. fr[sudoku[ii][jj]].sq=true;
  107. break;
  108. }
  109. case 9:
  110. {
  111. for(int ii=7; ii<=9; ii++)
  112. for(int jj=7; jj<=9; jj++)
  113. fr[sudoku[ii][jj]].sq=true;
  114. break;
  115. }
  116. }
  117. }
  118.  
  119. void bkt(int w)
  120. {
  121. if(w>k){
  122. afis();
  123. exit(0);
  124. }
  125. else
  126. {
  127. clr();
  128. int x0=z[w].x;
  129. int y0=z[w].y;
  130. frcv(x0, y0);
  131. for(int i=1;i<=9;i++)
  132. if(!fr[i].lin && !fr[i].col && !fr[i].sq){
  133. sudoku[x0][y0]=i;
  134. cout<<endl;
  135. afis();
  136. bkt(w+1);
  137. sudoku[x0][y0]=0;
  138. clr();
  139. frcv(x0, y0);
  140. }
  141. }
  142. }
  143.  
  144. int main()
  145. {
  146. freopen("sudoku.in", "r", stdin);
  147. freopen("sudoku.out", "w", stdout);
  148. for(int i=1; i<=9; i++)
  149. for(int j=1; j<=9; j++)
  150. {
  151. cin>>sudoku[i][j];
  152. if(sudoku[i][j]==0)
  153. {
  154. k++;
  155. z[k].x=i;
  156. z[k].y=j;
  157. }
  158. }
  159. bkt(1);
  160. return 0;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement