Witam!!
Podczas pisania pewnego programu napotkalem na pewien problem, ktory sprowadzilem do nastepujacego (innego, prostrzego) problemu, ktorego to nie moge rozwiazac :). Otóż chodzi o to, że mam tablice dwuwymiarowa a konkretnie vector zawierajacy wektor znakow (vector<vector<char>>) ktory na konkretnym przypadku wyglada tak:
1234
3
0
24
2
A wiec jest to tablica ktora sklada sie z 5 wierszy, z ktorych to pierwszy zawiera cztery elementy {1,2,3,4} drugi i trzeci zawieraja tylko po jednym {3} i {0}, czwarty zawiera dwa {2,4} i ostatni wiersz - jeden {2}.
Chodzi teraz o to, aby z kazdego wiersza wybrac tylko po jednym elemencie z kazdego wiersza, ale takim, aby ostatecznie wszystkie wybrane elementy sie nie duplikowaly.
Czyli w skrocie - dla tego konkretnego przypadku poprawnym rozwiazaniem bedzie wybranie z pierwszego wiersza elementu pierwszego, z drugiego, trzeciego i piatego wiersza nie mamy wyboru, zas z 4 wiersza wybieramy element drugi. I tak otrzymujemy o to zestaw liczb {1,3,0,4,2}. Elementy sie nie powtarzaja, a wiec jest okej.
Nastepnie trzeba to "przekodzic". Wymyslilem, ze najprostrzym algorytmem do rozwiazania tego typu zadania bedzie po prostu wybranie wszystkich kombinacji, a nastepnie odsrotowanie tylko tych, w ktorych elementy sie nie powtarzaja.
Metodą "na pałę" dla tego konkretnego problemu, mozna to zrobic tak:
vector<int> kombinacja;
kombinacja.push_back(tablicaIndexow[0][0]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][0]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
kombinacja.push_back(tablicaIndexow[0][1]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][0]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
kombinacja.push_back(tablicaIndexow[0][2]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][0]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
kombinacja.push_back(tablicaIndexow[0][3]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][0]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
kombinacja.push_back(tablicaIndexow[0][0]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][1]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
kombinacja.push_back(tablicaIndexow[0][1]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][1]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
kombinacja.push_back(tablicaIndexow[0][2]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][1]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
kombinacja.push_back(tablicaIndexow[0][3]);
kombinacja.push_back(tablicaIndexow[1][0]);
kombinacja.push_back(tablicaIndexow[2][0]);
kombinacja.push_back(tablicaIndexow[3][1]);
kombinacja.push_back(tablicaIndexow[4][0]);
sprawdzKombinacje(kombinacja);
kombinacja.clear();
Jednak poniewaz owa tablica dwuwymiarowa (czy jakkolwiek to nazwac) nie zawsze ma taki rozmiar i takie elementy, nalezaloby ta metode jakos sparametryzowac. I tu prosze o pomoc, poniewaz totalnie nie mam pomyslu jak to zrobic.
Czy ktos moglby mi cos podpowiedziec?
Z gory dzieki za odpowiedzi!