我有一个小问题,我需要找到给定一组数字的所有可能路径。例如,假设我们有数字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图库来解决这个问题,但我不太清楚怎么做,因为我没有足够的经验。任何帮助将不胜感激。
提前致谢
答案 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 );
}