【发布时间】:2015-05-04 14:45:31
【问题描述】:
我认为这是一个经典问题,但我没有找到适合我的问题的答案。 我有两个“MyObject”向量,我想遍历第一个向量元素与第二个向量元素的所有可能组合,并分别处理所有情况。 (第二个向量可能比第一个包含更多元素)。 这是我目前正在做的伪代码:
select_assignement(vector1, vector2, assignement){
vector1_memory = copy(vector1);
vector2_memomry = copy(vector2);
foreach(element1 in vector1){
foreach(element2 in vector2){
assignement[element1] = element2;
vector1_memory.remove(element1);
vector2_memory.remove(element2);
if(vector1_memory.size()>0)
select_assignement(vector1_memory, vector2_memory, assignement);
else
print_assignment(assignment); // Here I finally get one possible assignement
}
}
}
这里我假设vector1小于或等于vector2。因此,我在两个向量之间分配了每一对“MyObject”,如果还有一些元素,我会递归地再次执行。我的问题是我必须在每次递归时复制向量,因为在向量的循环期间我无法删除 的对象... 我的问题是:这样做是正确的方法,还是我完全疯了?
感谢您的帮助
编辑:[a,b,c] 和 [1,2,3,4] 两个列表的输出将是:
assignement : [a1,b2,c3]
assignement : [a1,b2,c4]
...
assignement : [a4,b3,c2]
【问题讨论】:
-
做一个普通的 double
for有什么问题?为什么要递归? -
双 for 循环会给我 vector1 的一个元素与 vector2 的一个元素之间的所有组合,但不是vector1 的整个元素集与vector2 的整个元素集的所有组合。 (或者也许我设计得不好)
-
您的意思是连接
vec1和vec2,然后改组生成的vec3吗?或者也许洗牌然后连接?我无法理解您的目标。 -
我的意思是如果有两个列表
[a,b,c]和[1,2,3,4]我不想作为输出:{[a1],[a2],...[c3],[c4]}但{[a1,b2,c3], [a1,b2,c4], ... , [a4,b3,c2]} -
你能用两个简单的向量在你的问题中添加一个简单的例子吗?例如三个和两个元素?
标签: c++ combinations