无法在C ++中使用多个独占组合

时间:2012-06-18 20:10:21

标签: c++ combinations data-partitioning

我有一个有序的字符串,我需要呈现给用户:

ABCCDDCBBBCBBDDBCAAA

'B'表示的对象被标记,这样2个B在它们后面会有'〜'。

AB~CCDDCB~BBCBBDDBCAAA
AB~CCDDCBB~BCBBDDBCAAA
AB~CCDDCBBB~CBBDDBCAAA
and so on...

我使用了Howard Hinnant的combinations library,它适用于这个简单的案例。我的测试代码使用位置向量作为通过for_each_combination发送的整数。

然而,当我有B的多个标签时,我很遗憾该怎么做。

例如,4Bs总需要标记,2表示'〜',2表示'#'

AB~CCDDCB~B#B#CBBDDBCAAA
AB#CCDDCB~B~B#CBBDDBCAAA
AB~CCDDCB#B~B#CBBDDBCAAA
AB#CCDDCB#B~B~CBBDDBCAAA
ABCCDDCB~B~B#CB#BDDBCAAA
and so on...

我写出的伪代码是级联的。在第一个for_each_combination之后,对于每个结果组合,将每个其他位置复制到另一个向量并执行另一个for_each_combination。

考虑到我将要合作的组合数量,我希望有更好的方法。

2 个答案:

答案 0 :(得分:2)

这听起来像是家庭作业,所以首先我不会只给你代码,其次我添加了[家庭作业]标签。

现在,要放置四个标记,合理的解决方案是一组嵌套for循环,其中四个

标记限制在7个位置,因此只需从0到6计算,包括

然后将其转换为字符串中的位置

然后输出带有标记

的字符串

我已经确认这很容易做到

如果您需要进一步的帮助,只需提出一个新问题(并显示您目前所获得的内容)

答案 1 :(得分:1)

我相信经过一番观察后我已回答了自己的问题。

首先,我从使用霍华德的图书馆转到了Hervé的combinations library。主要的方法是使用next_combination允许我将组合计算链接在一起,如下所示:

do {
    do {
    cout << values << endl;
    } while (next_combination(values.begin() + 3, values.begin() + 5, values.end()));
} while (next_combination(values.begin(), values.begin() + 3, values.end()));

我需要将它按到迭代器中,但这正是我需要的。