Reihenfolge austesten
-
Hallo,
ich habe das Problem alle erdenklichen Reihenfolgen oder Kombinationsmöglichkeiten einer Reihe durchtesten zu müssen.
Also, sagen wir A, B, C, D, E, F, G, H, I und J.
1.) A, B, C, D, E, F, G, H, I, J
2.) B, A, C, D, E, F, G, H, I, J
3.) usw.Mir ist klar, das mit jeder Einheit die dazu kommt, die Möglichkeiten ástronomisch steigen.
Wer kennt aber einen Algorithmus für dieses Prob.Vielen Dank
Geoffrey
-
[Edit]Nu aber:
int fakultaet( int count ) { int result; for ( result = 1; count > 1; --count ) { result *= count; } return ( count < 0 ) ? -1 : result; } void generate( char *array, int count ) { int i, iter = fakultaet( count ); for ( i = 0; iter; --iter ) { // Ausgeben usw... for ( int j = 0; j < count; ++j ) { std::cout << array[ j ] << " "; } std::cout << std::endl; swap( array[ i ], array[ i+1 ] ); i = ( i == count-2 ) ? 0 : i+1; } }grüße
-
Wow...
hätte nicht gedacht, dass so schnell geantwortet wird.
Liebe Grüsse
Geoffrey
-
Oder man macht sich das Leben ganz einfach und verwendet next_permutation

#include <algorithm> #include <iterator> #include <iostream> int main() { std::string str = "ABCDEFGHIJ"; do { std::copy(str.begin(),str.end(),std::ostream_iterator<char>(std::cout, ", ")); std::cout << "\n"; } while(std::next_permutation(str.begin(),str.end())); return 0; }
-
evilissimo schrieb:
Oder man macht sich das Leben ganz einfach und verwendet next_permutation

#include <algorithm> #include <iterator> #include <iostream> int main() { std::string str = "ABCDEFGHIJ"; do { std::copy(str.begin(),str.end(),std::ostream_iterator<char>(std::cout, ", ")); std::cout << "\n"; } while(std::next_permutation(str.begin(),str.end())); return 0; }Is das nich langweilig?

-
David_pb schrieb:
Is das nich langweilig?

Stimmt, hast Recht!Dann einfach beide Lösungen verknüpfen.
1. Mache eine leere Liste
2. Solange Länge der Liste != Anzahl der Permutationen
2 a) Bestimme Zufallszahl zuf
2 b) Rufe zuf mal nextPermutation() auf
2 c) Wenn nicht in Liste vorhanden: Gib aus und füge in Liste ein