在二部匹配算法中,如何选择先增强哪条边?

2024-06-26 13:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个ford-fulkerson算法来匹配二部图中的节点。目前该算法是递归的,二部图被存储为列表字典。你知道吗

bpGraph = {0: [0, 2, 1], 1: [2, 1, 1], 2: [0, 0, 2]}

意味着U中的节点0可以移动到V中的节点[0、2、1],以此类推。你知道吗

我的函数的递归性质意味着我的算法在V中为U中的每个节点寻找一个可用的节点,如果V中的节点是自由的,则分配它,它对U中的所有节点都执行此操作。如果U中有一个节点希望转到V中的某个位置,它会递归地检查V中是否存在当前分配给该节点的节点的备用节点(如果存在)。你知道吗

这是伟大的,但它总是返回相同的匹配。我希望能够找到所有可能的最大匹配。有人知道如何在不使用递归的情况下实现ford-fulkerson算法吗?然后我可以在哪里声明我要首先扩充哪条边,而不是在循环中进行?你知道吗

我能想到的唯一解决办法是在偶匹配图中找到边,贪婪地遍历所有可能的匹配,并检查它们是否对应于最后的最大流。然而,这似乎是一个糟糕的解决方案。你知道吗

提前谢谢

S码


Tags: 函数算法声明列表字典节点情况解决方案