我認爲這是一個經典問題,但我沒有找到適合我的問題的答案。 我有兩個'MyObject'向量,我想遍歷第一個向量的元素與第二個元素的所有可能組合,並將所有情況分開處理。 (第二個向量可能比第一個向量更多)。 這裏是我目前在做什麼僞代碼:測試所有組合(C++)
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
}
}
}
在這裏,我認爲是向量1小於或等於vector2。所以我給這兩個向量之間的每一對'MyObject'賦值,如果剩下一些元素,我會再次遞歸地執行。我的問題是我必須複製矢量每次遞歸,因爲我無法刪除矢量上的一個循環期間的對象...我的問題是:這是做正確的方式,還是我完全瘋狂?
感謝您的幫助
編輯:輸出爲兩個列表[a,b,c]
和[1,2,3,4]
是:
assignement : [a1,b2,c3]
assignement : [a1,b2,c4]
...
assignement : [a4,b3,c2]
做一個普通的雙'for'有什麼問題?爲什麼遞歸? – Quentin
double for循環會給我vector1的一個元素與vector2的一個元素之間的所有組合,但不是vector1的整個元素集合與vector2的整個元素集合的所有組合。 (或者,也許我設計得這麼差) – Arcyno
你的意思是連接'vec1'和'vec2',然後洗牌得到的'vec3'?或者也許洗牌然後連接?我無法理解你的目標。 – Quentin