比较一般树中两个节点的所有子节点

时间:2020-05-18 14:01:10

标签: c++ algorithm tree

我有问题,需要比较一般树的两个节点的所有子节点。每个父母可以有多个孩子,对于每次比较,我都必须获得最佳的组合。 例如,如果我想比较节点B和F,则可能的子项组合为:C:G,C:H,D:G,D:H,E:G,E:H。

Example tree

对于每一对,我都有存储在数组中的结果数据:

[[2,0],    [[C:G,C:H],
 [3,5],  = [D:G,D:H],
 [2,3]]    [E:G,E:H]]

我尝试了类似于以下算法的蛮力算法:https://www.geeksforgeeks.org/combinations-from-n-arrays-picking-one-element-from-each-array/,但是这种解决方案允许最佳组合成为一个,其中一个节点与另一棵树的节点多次配对。

在比较3x3节点的情况下,可能的解决方案是:

Matrix of possible pairs values:
[[1,0,1],
 [0,2,1],
 [1,1,0]]
Possible combinations with results:
[0,0],[1,1],[2,2] = 3
[0,0],[1,2],[2,1] = 3
[0,1],[1,0],[2,2] = 2
[0,1],[1,2],[2,0] = 0
[0,2],[1,1],[2,0] = 4
[0,2],[1,0],[2,1] = 2

我想知道我是否应该使用该矩阵,如果要使用,如何实现算法。我正在用C ++编写,但是它是uni分配的一部分,所以我不希望使用现成的代码,而只是伪代码解决方案或指针以正确的方向看待。我不能使用库算法或其他算法。我必须自己实施解决方案。 我当时在考虑递归函数,该函数将访问的列中的所有单元格传递给我,但是我认为有一种更简单的方法可以做到这一点。 我可以使用蛮力方法,因此我希望计算所有可能的组合并选择最佳组合。

0 个答案:

没有答案
相关问题