Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Zadatak: Permutacija od 1 do 6 elemenata rekurzivno
- Datum: 2012-12-01
- Autor: Kristijan Burnik, udruga informatičara Božo Težak
- Gmail: kristijanburnik
- */
- #include <iostream>
- #include <cstdlib>
- #include <vector>
- using namespace std;
- void ispisi(vector <int> &v) {
- int n = v.size();
- for (int i = 0; i < n; i ++){
- cout << v[i] << " ";
- }
- cout << endl;
- }
- // prouciti ovu proceduru,
- // iz nje nastaje uzorak po kojem gradimo permutacije za bilo koji broj elemenata
- void permutiraj_do_6_elemenata ( vector<int> & v, int pocetak, int kraj ) {
- int n = kraj - pocetak+1;
- if (n == 1) {
- ispisi(v);
- return;
- }
- if (n == 2) {
- // permutiraj bez pocetne zamjene
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // zamijeni i permutiraj
- swap(v[pocetak],v[pocetak+1]); // (trenutni sa 1. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // vrati natrag poredak
- swap(v[pocetak],v[pocetak + 1]);
- return;
- }
- if (n == 3) {
- // permutiraj bez pocetne zamjene
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // zamijeni i permutiraj
- swap(v[pocetak],v[pocetak+1]); // (trenutni sa 1. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+2]); // (trenutni sa 2. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // vrati natrag poredak
- swap(v[pocetak],v[pocetak+2]);
- swap(v[pocetak],v[pocetak+1]);
- return;
- }
- if (n == 4) {
- // permutiraj bez pocetne zamjene
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // zamijeni i permutiraj
- swap(v[pocetak],v[pocetak+1]); // (trenutni sa 1. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+2]); // (trenutni sa 2. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+3]); // (trenutni sa 3. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // vrati natrag poredak
- swap(v[pocetak],v[pocetak+3]);
- swap(v[pocetak],v[pocetak+2]);
- swap(v[pocetak],v[pocetak+1]);
- return;
- }
- if (n == 5) {
- // permutiraj bez pocetne zamjene
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // zamijeni i permutiraj
- swap(v[pocetak],v[pocetak+1]); // (trenutni sa 1. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+2]); // (trenutni sa 2. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+3]); // (trenutni sa 3. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+4]); // (trenutni sa 4. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // vrati natrag poredak
- swap(v[pocetak],v[pocetak+4]);
- swap(v[pocetak],v[pocetak+3]);
- swap(v[pocetak],v[pocetak+2]);
- swap(v[pocetak],v[pocetak+1]);
- return;
- }
- if (n == 6) {
- // permutiraj bez pocetne zamjene
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // zamijeni i permutiraj
- swap(v[pocetak],v[pocetak+1]); // (trenutni sa 1. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+2]); // (trenutni sa 2. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+3]); // (trenutni sa 3. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+4]); // (trenutni sa 4. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- swap(v[pocetak],v[pocetak+5]); // (trenutni sa 5. susjedom)
- permutiraj_do_6_elemenata(v,pocetak+1,kraj);
- // vrati natrag poredak
- swap(v[pocetak],v[pocetak+5]);
- swap(v[pocetak],v[pocetak+4]);
- swap(v[pocetak],v[pocetak+3]);
- swap(v[pocetak],v[pocetak+2]);
- swap(v[pocetak],v[pocetak+1]);
- return;
- }
- }
- int main(void) {
- int n;
- cin >> n;
- if (n > 6) {
- cout << "Ne moze vise od 6 elemenata!" << endl;
- system("pause");
- return 0;
- }
- vector<int> v;
- v.resize(n);
- for (int i = 0; i < n ; i++) {
- cin >> v[i];
- }
- permutiraj_do_6_elemenata(v,0,n-1);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement