C++以广度优先搜索的方式查找多个数组中元素的所有组合
C++ Find all combinations of elements in multiple arrays in Breadth-first search manner
我有多个数组,想找到这些数组中所有元素的排列。每个元素也有一个权重,这些数组按权重递减进行排序。我有一个有权重的数组,它模仿了数组本身的值。我希望我的搜索能找到从最大权重到最小权重的排列。
然而,数组中的每个元素都有一个与之相关的权重,所以我想先用权重最高的元素来运行搜索。
示例:
arr0 = [A, B, C, D]
arr0_weight = [11, 7, 4, 3]
arr1 = [W, X, Y]
arr1_weight = [10, 9, 4]
因此,理想的输出是:
AW (11+10=21)
AX (11+9=20)
BW (7+10=17)
BX (7+9=16)
AY (11+4=15)
...
如果我只是做了一个这样的for循环:
for (int i = 0; i < sizeof(arr0)/4; i++) {
for (int j = 0; j < sizeof(arr1)/4; j++) {
cout << arr0[i] << arr1[j] << endl; }}
我会得到:
AW (11+10=21)
AX (11+9=20)
AY (11+4=15)
BW (7+10=17)
BX (7+9=16)
BZ (7+4=11)
这不是我想要的,因为17>15和16>15。
此外,对于n个数组,有什么好方法可以做到这一点?如果我不知道我会有多少个数组,而且它们的大小可能不都一样?
我已经研究过将值放入向量中,但我找不到一种方法来实现我想要的(排序的笛卡尔乘积)。有什么帮助吗?如果你没有时间,伪代码也可以——我只是真的被卡住了。
非常感谢。
您的问题是关于算法,而不是C++。
您希望在笛卡尔乘积中从最重到最轻对所有元组进行排序。
最简单的方法是找到所有元组,并根据它们的权重对它们进行排序。
如果您需要顺序访问,您应该执行以下操作。由于元组的权重是它的元素的权重之和,我认为贪婪在这里是最优的。让我们转到任意数量的任意维度的数组。创建一组索引。最初,它包含0。它所代表的第一个元组显然是最重的。找到一个要增加的索引:选择权重最小、和下一个元素差异最小的索引。不要忘记跟踪耗尽的数组。当所有的矢量都用完了,你就完了。
要在C++中实现它,应该使用vector<pair<element_t, weight_t>>
作为输入数据,使用set<pair<weight_difference_t, index_t>>
作为索引集。所有类型可能都是整数,但我使用自定义类型来显示应该存在哪些数据。你还应该知道如何比较这双鞋。
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀