子由 : 深度學習 C++

POWER SET
說 明 應用問題區首頁

  列印某序列的 POWER SET

[ 下載程式碼 ]


#include <iostream>
#include <iterator>
#include <list>
#include <vector>
#include <algorithm>

using namespace std ;


template <class T , class Iter>
void  find_subset( Iter first , Iter last , int n , vector<T>& foo ) {

    if ( n == 0 ) {

        cout << "( " ;
        copy( foo.begin() , foo.end() , ostream_iterator<T>(cout," ") ) ;
        cout << ")  " ;
        
    } else {
        
        for ( Iter iter = first ; iter != last ; ++iter ) {

            foo.push_back( *iter ) ;
            ++iter ;
            find_subset( iter , last , n-1 , foo ) ;
            --iter ;
            foo.pop_back() ;

        }

    }

}


template <class T , class Iter>
void  power_set( Iter first , Iter last ) {
    
    int  no = distance(first,last) ;

    cout << "The POWER SET of ( " ;
    copy( first , last , ostream_iterator<T>(cout," ") ) ;
    cout << ")\n" ;
    
    cout << "> Φ" << endl << endl ;

    vector<T>  sets ;
    for ( int i = 1 ; i <= no ; ++i ) {
        sets.resize(0) ;
        cout << "> " << i << " element" << ( i == 1 ? " :\n" : "s :\n" ) ;
        find_subset( first , last , i , sets ) ;
        cout << "\n\n" ;
    }

    cout << endl ;

}


int main() {

    char  a[] = "abcdefg" ;
    power_set<char,char*>( a , a+6 ) ;

    int   b[] = { 1 , 2 , 3 , 4 };
    power_set<int,int*>( b , b+4 ) ;

    list<char>  c(a+2,a+5) ;
    power_set<char,list<char>::iterator>( c.begin() , c.end() ) ;

    return 0 ;
    
}

輸 出

The POWER SET of ( a b c d e f )
> Φ

> 1 element :
( a )  ( b )  ( c )  ( d )  ( e )  ( f )  

> 2 elements :
( a b )  ( a c )  ( a d )  ( a e )  ( a f )  ( b c )  ( b d )  ( b e )  ( b f )  ( c d )  ( c e )  ( c f )  ( d e )  ( d f )  ( e f )  

> 3 elements :
( a b c )  ( a b d )  ( a b e )  ( a b f )  ( a c d )  ( a c e )  ( a c f )  ( a d e )  ( a d f )  ( a e f )  ( b c d )  ( b c e )  ( b c f )  ( b d e )  ( b d f )  ( b e f )  ( c d e )  ( c d f )  ( c e f )  ( d e f )  

> 4 elements :
( a b c d )  ( a b c e )  ( a b c f )  ( a b d e )  ( a b d f )  ( a b e f )  ( a c d e )  ( a c d f )  ( a c e f )  ( a d e f )  ( b c d e )  ( b c d f )  ( b c e f )  ( b d e f )  ( c d e f )  

> 5 elements :
( a b c d e )  ( a b c d f )  ( a b c e f )  ( a b d e f )  ( a c d e f )  ( b c d e f )  

> 6 elements :
( a b c d e f )  


The POWER SET of ( 1 2 3 4 )
> Φ

> 1 element :
( 1 )  ( 2 )  ( 3 )  ( 4 )  

> 2 elements :
( 1 2 )  ( 1 3 )  ( 1 4 )  ( 2 3 )  ( 2 4 )  ( 3 4 )  

> 3 elements :
( 1 2 3 )  ( 1 2 4 )  ( 1 3 4 )  ( 2 3 4 )  

> 4 elements :
( 1 2 3 4 )  


The POWER SET of ( c d e )
> Φ

> 1 element :
( c )  ( d )  ( e )  

> 2 elements :
( c d )  ( c e )  ( d e )  

> 3 elements :
( c d e )