【问题标题】:All possible paths in a series of numbers一系列数字中的所有可能路径
【发布时间】:2012-10-18 22:15:15
【问题描述】:

我有一个小问题,我需要在给定一组数字的情况下找到所有可能的路径。例如,假设我们有数字 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 图形库来解决这个问题,但我不太确定该怎么做,因为我没有足够的经验。任何帮助将不胜感激。

提前致谢

【问题讨论】:

  • 而您的具体问题/疑问是...?
  • 您是否在 StackOverflow 或网络上搜索过“C++ 组合”或“C++ 排列”?
  • 好吧,我正在寻找一种 C++ 算法……抱歉没有具体说明。托马斯,这不是直接的排列问题,我已经研究过了,但无济于事。
  • 与通常的组合查找的所有不同之处在于,您需要从 1 个元素组合到 n 个元素组合的所有组合(可以用于循环吗?)。
  • 哦,不太清楚你的问题是什么意思。我不太明白(对不起,如果我在这里很愚蠢)。

标签: c++ boost-graph


【解决方案1】:
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 );
}

【讨论】:

  • 谢谢你,非常感谢:)
  • 你懂逻辑吗?我要你想一想,真的很简单不是吗?
  • 是的,我绝对理解其中的逻辑,而且很有道理。唯一的障碍是,对于大量元素,它会占用大量内存。无论如何,谢谢,非常感谢:)
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多