Šta je novo?

Kombinacije c++

Mrav

Čuven
Učlanjen(a)
28.04.2002
Poruke
87
Poena
609
Jel zna neko dobar algoritam u c++ za izracunavanje svih kombinacija odredjenog skupa brojeva (znaci gde polozaj elementa nije bitan).

Ne bih da izmisljam toplu vodu :)
 
Znam ja. Reci jel ti josh reba, napisacu i poslati ti source sutra-prekosutra.
 
treba salji!
 
[code:1]
/* Algoritam je rekurzivne prirode. Sushtina je sledeca:
Na prvom mestu u konkretnoj kombinaciji moze se naci svih n elemenata niza "brojevi". Taj prvi element kombinacije bira se u for petlji, pochev od nultog. Na sledecem mestu mogu biti svi oni koji u nizu "brojevi" imaju indeks veci od indeksa prethodno izabranog broja. Ovo nam govori parametar "pocetniIndeks". Ponovo izaberemo jedan, i tako dalje. Ovim osiguravamo da u nizu koji shtampamo nema ponavljanja jednih istih brojeva, i da nam se kombinacije ne ponavljaju.
Kada dubina rekurzije postane jednaka klasi kombinacije, shtampamo
kombinaciju.
*/

#include <iostream.h>

void Ucitaj(int&n, int&k, int* brojevi)
{
cout << "\nKoliko brojeva unosish?";
cin >> n;
for (int i=0; i<n; i++)
{
cout << "\n" << i+1 << ". broj:";
cin >> brojevi;
}
cout << "Unesi klasu kombinacije:";
cin >> k;
}

void Stampaj(int k, const int* indeksi, const int* brojevi)
{
cout << "\n";
for (int i=0; i<k; i++) cout << brojevi[indeksi]<< " ";
}


void Obradi(int dubinaRekurzije, int pocetniIndeks, int n, int k, int* indeksi, const int* brojevi)
{
for (int i=pocetniIndeks; i<n; i++)
{
indeksi[dubinaRekurzije]=i;
if (dubinaRekurzije<k-1)
Obradi(dubinaRekurzije+1, i+1, n, k, indeksi, brojevi);
else Stampaj(k, indeksi, brojevi);
}
}

void main()
{
int brojevi[10], indeksi[10];
int n, k;

Ucitaj(n, k, brojevi);
Obradi(0, 0, n, k, indeksi, brojevi);
}
[/code:1]
 
Vrh Dno