fork download
  1. // Latinski kvadrat
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int latinski_kvadrat[6][6];
  7. int n;
  8.  
  9. bool moze_broj(int red, int kolona, int broj)
  10. {
  11. for (int x = 0; x < n; x++)
  12. if (latinski_kvadrat[red][x] == broj or latinski_kvadrat[x][kolona] == broj)
  13. return false;
  14. return true;
  15. }
  16.  
  17. void resi(int red, int kolona)
  18. {
  19. if (red == n)
  20. {
  21. for (int i = 0; i < n; i++)
  22. {
  23. for (int j = 0; j < n; j++)
  24. cout << latinski_kvadrat[i][j];
  25. cout << endl;
  26. }
  27. cout << endl;
  28. return;
  29. }
  30. int sledeci_red = red;
  31. if (kolona == n - 1)
  32. sledeci_red++;
  33. int sledeca_kolona;
  34. if (kolona == n - 1)
  35. sledeca_kolona = 0;
  36. else
  37. sledeca_kolona = kolona + 1;
  38. if (latinski_kvadrat[red][kolona] != 0)
  39. resi(sledeci_red, sledeca_kolona);
  40. else
  41. for (int broj = 1; broj <= n; broj++)
  42. if (moze_broj(red, kolona, broj))
  43. {
  44. latinski_kvadrat[red][kolona] = broj;
  45. resi(sledeci_red, sledeca_kolona);
  46. latinski_kvadrat[red][kolona] = 0;
  47. }
  48. }
  49.  
  50. int main()
  51. {
  52. cin >> n;
  53. for (int i = 0; i < n; i++)
  54. {
  55. string linija;
  56. cin >> linija;
  57. for (int j = 0; j < n; j++)
  58. latinski_kvadrat[i][j] = linija[j] - '0';
  59. }
  60. resi(0, 0);
  61. return 0;
  62. }
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout