ßēūź ļšīćšąģģčšīāąķč’ C++. Āāīäķūé źóšń

Ąėćīščņģ next_permutation()


template < class BidirectionalIterator >

bool

next_permutation( BidirectionalIterator first,

                  BidirectionalIterator last );

template < class BidirectionalIterator, class Compare >

bool

next_permutation( BidirectionalIterator first,

                  BidirectionalIterator last, class Compare );



next_permutation()

įåšåņ ļīńėåäīāąņåėüķīńņü, īćšąķč÷åķķóž äčąļąēīķīģ [first,last), č, ń÷čņą’ åå ļåšåńņąķīāźīé, āīēāšąłąåņ ńėåäóžłóž ēą ķåé (ī ņīģ, źąź óļīš’äī÷čāąžņń’ ļåšåńņąķīāźč, ćīāīščėīńü ā šąēäåėå 12.5). Åńėč ńėåäóžłåé ļåšåńņąķīāźč ķå ńółåńņāóåņ, ąėćīščņģ āīēāšąłąåņ false, čķą÷堖 true. Ā ļåšāīģ āąščąķņå äė’ īļšåäåėåķč’ ńėåäóžłåé ļåšåńņąķīāźč čńļīėüēóåņń’ īļåšąņīš “ģåķüųå” ā źėąńńå żėåģåķņīā źīķņåéķåšą, ą āī āņīšīģ – īļåšąöč’ ńšąāķåķč’ comp. Ļīńėåäīāąņåėüķūå īįšąłåķč’ ź next_permutation()

ćåķåščšóžņ āńå āīēģīęķūå ļåšåńņąķīāźč ņīėüźī ā ņīģ ńėó÷ąå, źīćäą čńõīäķą’ ļīńėåäīāąņåėüķīńņü īņńīšņčšīāąķą. Åńėč įū ā ļīźąēąķķīé ķčęå ļšīćšąģģå ģū ļšåäāąščņåėüķī ķå īņńīšņčšīāąėč ńņšīźó musil, ļīėó÷čā ilmsu, ņī ķå óäąėīńü įū ńćåķåščšīāąņü āńå ļåšåńņąķīāźč.

#include <algorithm>

#include <vector>

#include <iostream.h>

          

void print_char( char elem ) { cout << elem ; }

void (*ppc)( char ) = print_char;

/* ļå÷ąņąåņń’:

ilmsu   ilmus   ilsmu   ilsum   ilums   ilusm   imlsu   imlus

imslu   imsul   imuls   imusl   islmu   islum   ismlu   ismul

isulm   isuml   iulms   iulsm   iumls   iumsl   iuslm   iusml

limsu   limus   lismu   lisum   liums   liusm   lmisu   lmius

lmsiu   lmsui   lmuis   lmusi   lsimu   lsium   lsmiu   lsmui

lsuim   lsumi   luims   luism   lumis   lumsi   lusim   lusmi

milsu   milus   mislu   misul   miuls   miusl   mlisu   mlius

mlsiu   mlsui   mluis   mlusi   msilu   msiul   msliu   mslui

msuil   msuli   muils   muisl   mulis   mulsi   musil   musli

silmu   silum   simlu   simul   siulm   siuml   slimu   slium

slmiu   slmui   sluim   slumi   smilu   smiul   smliu   smlui

smuil   smuli   suilm   suiml   sulim   sulmi   sumil   sumli

uilms   uilsm   uimls   uimsl   uislm   uisml   ulims   ulism

ulmis   ulmsi   ulsim   ulsmi   umils   umisl   umlis   umlsi

umsil   umsli   usilm   usiml   uslim   uslmi   usmil   usmli

*/

int main()

{

           vector<char,allocator> vec(5);

                 

           // ļīńėåäīāąņåėüķīńņü ńčģāīėīā: musil

           vec[0] = 'm'; vec[1] = 'u'; vec[2] = 's';

           vec[3] = 'i'; vec[4] = 'l';

                 

           int cnt = 2;

           sort( vec.begin(), vec.end() );

           for_each( vec.begin(), vec.end(), ppc ); cout << "\t";

                 

           // ćåķåščšóžņń’ āńå ļåšåńņąķīāźč ńņšīźč "musil"

           while( next_permutation( vec.begin(), vec.end()))

     {

        for_each( vec.begin(), vec.end(), ppc );

        cout << "\t";

                 

        if ( ! ( cnt++ % 8 )) {

             cout << "\n";

                    cnt = 1;

        }

           }

                 

           cout << "\n\n";

           return 0;

}



Ńīäåšęąķčå šąēäåėą