tothk2a11 Temat założony przez niniejszego użytkownika |
Generowanie kombinacji w porzadku leksykograficznym. » 2013-08-18 18:11:58 Napisałem kod generujący kombinacji w porządku leksykograficznym.
Ale niektóre kombinacje wyświetla mi po kilka razy.
#include <iostream> #include <conio.h> #include <fstream> #include <string> #include <sstream>
using namespace std;
main()
{ int k( 3 ); int const n( 10 ); int a[ k ]; for( int i = 0; i < k; i++ ) { a[ i ] = i + 1; } int z = k - 1; while( z >= 0 ) { for( int i = 0; i < k; i++ ) { cout << a[ i ] << ", "; } cout << "\n"; getch(); if( a[ z ] <( n -( k - z - 1 ) ) ) { a[ z ] ++; while( z + 1 < k ) { a[ z + 1 ] = a[ z ] + 1; z++; } } else { z--; } } getch(); return 0; }
Przykład generowania kombinacji.
Kombinacja 3 elementowa ze zbioru 10 elementowego. k=3, n=10
1, 2, 3,
1, 2, 4,
1, 2, 5,
1, 2, 6,
1, 2, 7,
1, 2, 8,
1, 2, 9,
1, 2, 10, tu jest problem
1, 2, 10, <=
1, 3, 4,
1, 3, 5,
1, 3, 6,
...c.d.
Po osiągnięciu w ostatnim elemencie maksymalnej wartości, program wykonuje całą pętle zmieniając podnoszenie elementu z ostatniego na przedostatni.
Z tego co przeanalizowałem to jest przyczyna podwajania wyświetlanych kombinacji.
Szukam sposobu żeby to przeskoczyć.
|
|
pekfos |
» 2013-08-18 19:30:12 Wyświetlasz aktualną kombinację niezależnie od tego, czy się zmieniła. (Wyświetlasz kombinację, warunek się nie spełnia, zmniejszasz z i ponownie wyświetlasz tą samą kombinację). |
|
Mrovqa |
» 2013-08-18 20:12:17 Nie szybciej i łatwiej byłoby wykorzystać std::sort oraz std::next_permutation z biblioteki standardowej C++? |
|
tothk2a11 Temat założony przez niniejszego użytkownika |
» 2013-08-18 20:13:35 Jakieś sugestie jak to przeskoczyć.
Jeśli chodzi o moją wiedzę i umiejętności w programowaniu to jeszcze raczkuję.
Programowaniem zajmuje się od kilku dni.
Próbuje generowanie kombinacji umieścić w funkcji, ale nie wiem czy to wypali.
Nie mam pomysłu jak zatrzymać funkcję generującą po wykonaniu kolejnych pętli. |
|
pekfos |
» 2013-08-18 20:18:04 Jakieś sugestie jak to przeskoczyć. |
Użyj dodatkowej zmiennej, określającej, czy wyświetlać kombinację, czy nie. |
|
tothk2a11 Temat założony przez niniejszego użytkownika |
» 2013-08-18 20:26:35 Użyj dodatkowej zmiennej, określającej, czy wyświetlać kombinację, czy nie
Nie bardzo wiem co ta dodatkowa zmienna miała by robić. A raczej od czego być uzależniona.
|
|
pekfos |
» 2013-08-18 20:40:32 A rozumiesz problem w swoim kodzie? |
|
tothk2a11 Temat założony przez niniejszego użytkownika |
» 2013-08-18 20:52:46 Wydaje mi się że tak.
To co wyświetla to bieżący stan tablicy k elementowej.
gdy element k jest maksymalny program zmienia tylko z-- (przechodzi do poprzedzającego elementu ) co nie zmienia stanu tablicy.
Kolejny cykl pętli ponownie wyświetla stan tablicy który był już wyświetlony, a później dopiero podnosi poprzednie elementy o 1.
|
|
« 1 » 2 |