Advertisement
kburnik

C++ - Permutacija N elemenata - rekurzivno

Dec 1st, 2012
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. /*
  2.     Zadatak: Permutacija N elemenata rekurzivno
  3.  
  4.     Datum: 2012-12-01
  5.  
  6.     Autor: Kristijan Burnik, udruga informatičara Božo Težak
  7.  
  8.     Gmail: kristijanburnik
  9.  
  10. */
  11. #include <iostream>
  12. #include <cstdlib>
  13. #include <vector>
  14.  
  15.  
  16. using namespace std;
  17.  
  18. void ispisi(vector <int> &v) {
  19.     int n = v.size();
  20.     for (int i = 0; i < n; i ++){
  21.         cout << v[i] << " ";    
  22.     }
  23.     cout << endl;
  24. }
  25.  
  26. void permutiraj ( vector<int> & v, int pocetak, int kraj ) {
  27.        // izracunaj broj elemenata koje treba zamijeniti
  28.        int n = kraj - pocetak+1;
  29.        
  30.        // ako nema zamjene (sve zamjene su obavljene)
  31.        // samo ispisi sve brojeve
  32.        if (n == 1) {
  33.             ispisi(v);
  34.             return;
  35.        }      
  36.  
  37.         // permutiraj bez pocetne zamjene
  38.         permutiraj(v,pocetak+1,kraj);
  39.        
  40.         // zamijeni i permutiraj
  41.         for (int i = 0; i < n; i++) {
  42.             swap(v[pocetak],v[pocetak+i]); // (trenutni sa i. susjedom)
  43.             permutiraj(v,pocetak+1,kraj);
  44.         }
  45.        
  46.         // vrati natrag poredak
  47.         for (int i = n-1; i >= 1; i--) {
  48.             swap(v[pocetak],v[pocetak+i]);
  49.         }
  50.    
  51. }
  52.  
  53. int main(void) {
  54.  
  55.     int n;
  56.     cin >> n;
  57.  
  58.     vector<int> v;
  59.     v.resize(n);
  60.    
  61.     for (int i = 0; i < n ; i++) {
  62.         cin >> v[i];
  63.     }
  64.    
  65.     permutiraj(v,0,n-1);
  66.  
  67.  
  68.  
  69.     system("pause");
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement