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