fork download
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int n, k, a[100], permCount;
  5.  
  6. void tipar() //afisarea unei solutii
  7. {
  8. int i;
  9. for(i=0; i<k; i++) //vom avea k nivele
  10. cout<<a[i]<<" ";
  11. cout<<"\n";
  12. }
  13.  
  14. bool valid(int k)
  15. {
  16. /*
  17.   int i;
  18.   for(i=0; i<k; i++)
  19.   if(a[i]==a[k]) // elementele unui aranjament sunt diferite
  20.   return 0;
  21. */
  22. return 1;
  23. }
  24.  
  25. void backtracking(int nivel)
  26. {
  27. if(nivel==k)
  28. tipar(), permCount++;
  29. else
  30. {
  31. a[nivel]=0; //initializare nivel
  32. while(a[nivel]<n)
  33. {
  34. a[nivel]++;
  35. if(valid(nivel)) //functie de validare
  36. backtracking(nivel+1); //trecerea la nivelul urmator
  37. }
  38. }
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44. cin>>n>>k;
  45. backtracking(0);
  46. cout << endl << permCount;
  47. return 0;
  48. }
  49.  
  50.  
Success #stdin #stdout 0s 16064KB
stdin
4 3
stdout
1 1 1 
1 1 2 
1 1 3 
1 1 4 
1 2 1 
1 2 2 
1 2 3 
1 2 4 
1 3 1 
1 3 2 
1 3 3 
1 3 4 
1 4 1 
1 4 2 
1 4 3 
1 4 4 
2 1 1 
2 1 2 
2 1 3 
2 1 4 
2 2 1 
2 2 2 
2 2 3 
2 2 4 
2 3 1 
2 3 2 
2 3 3 
2 3 4 
2 4 1 
2 4 2 
2 4 3 
2 4 4 
3 1 1 
3 1 2 
3 1 3 
3 1 4 
3 2 1 
3 2 2 
3 2 3 
3 2 4 
3 3 1 
3 3 2 
3 3 3 
3 3 4 
3 4 1 
3 4 2 
3 4 3 
3 4 4 
4 1 1 
4 1 2 
4 1 3 
4 1 4 
4 2 1 
4 2 2 
4 2 3 
4 2 4 
4 3 1 
4 3 2 
4 3 3 
4 3 4 
4 4 1 
4 4 2 
4 4 3 
4 4 4 

64