2D数组中指定部分的C ++排列

时间:2011-01-18 21:49:14

标签: c++ graph-theory permutation

我有一个简单的两个2D数组(表示为map),填充为1和0.

    | A | B | C | D | sum
--------------------------
  A | 0 | 1 | 1 | 1 |  3
  B | 1 | 0 | 0 | 0 |  1
  C | 1 | 0 | 0 | 1 |  2
  D | 1 | 0 | 1 | 0 |  1

它是graph的表示,因此该表与主对角线对称(没有成员与自身/没有递归/)。 我需要生成指定列/行的排列。 我知道有一个next_permutation()函数,但我不知道如何使用它(对于表示图的二维数组),我想我需要编写自己的算法,只返回2列/行的索引进行切换。我无法意识到,我会因为切换2个cols / rows而重写整个表。

最难的是,切换所有行/列并不是必要的,当有行时,它们具有唯一的总和 - 这个cols / rows(在我的例子中为A)可以留在他们的位置,因为它很清楚他们所属的第二个表中的哪个成员(=没有更多成员具有相同数量的关系)。

在我能够生成A-D(它的表)的排列之后,我可以将生成的表与第二个进行比较并检查,是否相同(这就是我已经完成的)。

我该如何进行排列?

1 个答案:

答案 0 :(得分:0)

只有64种双向图变体,就像你用4个顶点描述的那样。换句话说,您的图表包含6位信息,因此很容易从数字0到63构建。