Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int grila[9][9], poz_nule, sol_valid;
  4. struct{
  5. int lin, col;
  6. }pozitii[81];
  7. /// functii de verificare a liniilor/coloanelor/submatricilor;
  8. int linie_valida(int lin){
  9. for(int i = 0; i<8; i++){
  10. for(int j = i + 1; j<9; j++){
  11. if(grila[lin][i]==grila[lin][j] && grila[lin][i]!=0 && grila[lin][j]!=0) return 0;
  12. }
  13. }
  14. return 1;
  15. }
  16. int coloana_valida(int col){
  17. for(int i = 0; i<8; i++){
  18. for(int j = i+1; j<9; j++){
  19. if(grila[i][col]==grila[j][col] && grila[i][col]!=0 && grila[j][col]!=0) return 0;
  20. }
  21. }
  22. return 1;
  23. }
  24. int submat_valida(int lin, int col){
  25. int vals[9], ord = 0;
  26. for(int i = lin; i<lin+3; i++){
  27. for(int j = col; j<col+3; j++){
  28. if(grila[i][j]) vals[ord++] = grila[i][j];
  29. }
  30. }
  31. for(int i = 0; i<ord-1; i++){
  32. for(int j = i+1; j<ord; j++){
  33. if(vals[i]==vals[j] && vals[i]!=0 && vals[j]!=0) return 0;
  34. }
  35. }
  36. return 1;
  37. }
  38.  
  39. void back(int pos){
  40. for(int val = 1; val<=9 && !sol_valid; val++){
  41. grila[pozitii[pos].lin][pozitii[pos].col] = val;
  42.  
  43. if(linie_valida(pozitii[pos].lin) && coloana_valida(pozitii[pos].col) && submat_valida(pozitii[pos].lin/3*3, pozitii[pos].col/3*3))
  44. if(pos+1==poz_nule) sol_valid = 1;
  45. else back(pos + 1);
  46. if(!sol_valid){
  47. grila[pozitii[pos].lin][pozitii[pos].col] = 0;
  48. }
  49. }
  50. }
  51. void afis(){
  52. for(int i = 0; i<9; i++){
  53. for(int j = 0; j<9; j++) {
  54. printf("%d ", grila[i][j]);
  55. }
  56. printf("\n");
  57. }
  58. }
  59. int main(){
  60. freopen("sudoku.in", "r", stdin);
  61. freopen("sudoku.out", "w", stdout);
  62. for(int i = 0; i<9; i++){
  63. for(int j = 0; j<9; j++) {
  64. scanf("%d", &grila[i][j]);
  65. if(grila[i][j]==0){
  66. pozitii[poz_nule].lin = i;
  67. pozitii[poz_nule++].col = j;
  68. }
  69. }
  70. }
  71. back(0);
  72. // i am retarded
  73. afis();
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement