Zle dzialajacy algorytm -Generowanie wszystkich podzbiorow k-elementowych (kombinacji k-elemntowych)

1

Mam problem:
znalazlem kod w ksiazce "Kombinatoryka dla programistow" kod generujacy kombinacje k-elementowe ze zbioru n-elementowego bez powtorzen.
Kod dziala - lecz dziala tylko dla ciagu liczb rozniacych sie o 1 miedzy soba, czyli {1,2,....,n-1,n}. Ja natomiast musze wygenerowac kombinacje k-elementowa ze zbioru liczb losowych (posortowanych rosnaco) i w takim wypadku ten kod nie dziala.

#include <cstdlib> 
#include <iostream> 

using namespace std; 

  int K,N=20,w,p,i,l=0,o;
  int tab[20]; 
  
  

int main() 
{ 
  w=10; 
  K=(w-1); 
  
    //petla wypelnia tablice 
    for(i=0;i<20;i++){ 
            tab[i]=(i+1); 
            }; 
    p=K;
    o=tab[19]; 
    do 
    { 
   // funkcja generujaca podzbiory 
  
        if(tab[K]==o)  // jezeli liczba na ostatnim miejscu w tabeli jest rowna najwiekszej liczbie z generowanego zbioru, zmniejszamy liczbe p o 1 
        { 
            p=p-1; 
  
        } 
        else p=K;  // jezeli nie liczba p jest liczba k 
  
        if(p>=0) // jezeli p jest wieksze od 0 to zapetlamy wyrazenie od konca i zastepujemy wyraz na ostatnim miejscu w tablicy liczba o jeden wieksza 
            for(i=K;i>=p;i--) 
            { 
                tab[i]=tab[p]+i-p+1; 
                
                  
            }; 
            for(i=0;i<10;i++){ 
                              cout<<tab[i]<<" ";} 
                              
            cout<<"\n\n"<<l<<" "; 
            l++; 
    }while(p>=0); 
    cout<<"\n\nilosc kombinacji to: "<<l<<endl; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
}

Mysle, ze problem lezy w linii:
tab[i]=tab[p]+i-p+1;
Bo zamiast odwolywac sie do kolejnego elementu w tablicy, zwieksza na "sucho" element o 1, ale nie potrafie sobie poradzic z "naprawieniem" kody tak, zeby dzialal dla dowolnego ciagu liczb - nie tylko dla (n+1).

0

zamiast

for(i=0;i<10;i++){ 
                              cout<<tab[i]<<" ";}  

Napisz

for(i=0;i<10;i++){ 
                              cout<<tablica[ tab[i] ]<<" ";}  
0

Ok, ale nic poza wyswietlaniem samych "0" to nie daje...
Chyba, ze cos zle robie ;) - tablica tablica[] to tablica int'ow? Skad w niej jakiekolwiek wartosci?

Edit:
Ok - zrozumialem juz o co chodzi - o uzycie indeksu z tablicy tab[], w ktorej generuje kombinacje, do odczytu za pomoca tego indeksu danej z tablicy z wynikami tablica[] ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1