一系列数字中的所有可能路径

时间:2012-10-18 22:15:16

标签: c++ boost-graph

我有一个小问题,我需要找到给定一组数字的所有可能路径。例如,假设我们有数字1,2和3.我需要找到所有可能的组合。这个简单案例的结果是:
path_1 = 1
path_2 = 2
path_3 = 3
path_4 = 1,2
path_5 = 1,3
path_6 = 2,3
path_7 = 1,2,3

很容易看到路径的数量是(2 ^ n)-1 ,因此对于3个元素,它是7,依此类推。对于少量元素手动执行此操作非常简单,但随着数字越来越大,它变得越来越难。

有人建议我可以使用boost图库来解决这个问题,但我不太清楚怎么做,因为我没有足够的经验。任何帮助将不胜感激。

提前致谢

1 个答案:

答案 0 :(得分:0)

template< class It >
void compute_all_possible_paths( path_collection_t& res, It b, It e ) {
    std::size_t curVecSize = res.size();
    for( std::size_t i = 0; i < curVecSize; i++ ) {
        path_t p;
        p.reserve( res[i].size() + 1 );
        std::copy( res[i].begin(), res[i].end(), std::back_inserter(p) );
        p.push_back( *b );
        res.push_back( p );
    }
    path_t p;
    p.push_back( *b );
    res.push_back( p );
    if( ++b == e ) return ;
    compute_all_possible_paths( res, b, e );
}