如何从二部图中的现有匹配中获取扩展路径(如果存在)?

时间:2018-10-24 05:41:47

标签: python graph-theory matching vertices bipartite

我有一个矩阵,矩阵的形式为0和1,其中1表示连接两个顶点的边。我通过将这些1中的一些翻转为-1s从图中选择了一个匹配项。 -1s表示边缘在匹配中。显然,每行/每列最多有一个-1,否则将不匹配。

我在编写代码时遇到了麻烦,该代码将为我提供来自现有匹配项的扩展路径(如果存在)。这是最大匹配发现算法的一部分。

首先,我收集了图中所有不匹配的边的行和列索引。然后,我想获得一条扩展之路,但是我不确定该怎么做。如何获得给定的增广路径:

  • 现有匹配指标
  • 以矩阵表示的二部图
  • 有向二部图,其中-1分配给匹配中的图边。

这是我的图,以矩阵形式表示:

[[1. 1. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 1. 0. 0. 0. 0.]
 [1. 0. 1. 1. 1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 1. 1. 0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0. 1. 1. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 1. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 1. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1. 1.]
 [0. 0. 0. 0. 0. 0. 1. 1. 0. 0.]]

与匹配相对应的有向图如下:

array([[ 1.,  1., -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0., -1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  1.,  1., -1.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  1.,  1.,  0.,  0.,  0.,  0., -1.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0., -1.,  0.,  1.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  1.],
       [ 0.,  0.,  0.,  0.,  0.,  0., -1.,  1.,  0.,  0.]])

0 个答案:

没有答案