Bipartite Matching(二部图匹配问题)
问题描述:
输入:无向图,二部图 G = ( L ∪ R, E)
输出:最大基数匹配
❗算法描述❗:
与之前计算最大流的算法相似,首先要将该问题转化为最大流问题。二部图匹配问题旨在输出从 L 到 R 可以有的最多的路径。我们就可以在左侧加一个源点 source,在右侧加一个终点 sink。源点 source 指向 L 中的每一个顶点,边的权值为 1;R 中的每一个顶点指向 sink,边的权值也为1;再将原先 L 到 R 的每条边的方向都设为 L → R,每条边的权值同样为 1。这样,计算该二部图中的最大基数匹配的问题,就可以转换为计算从源点 source 到终点 sink 的最大流的问题✌。
代码✍:
/*************
设计与实现二部图最大匹配(Bipartite Matching)问题的求解算法。
*************/
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int vexnum1, vexnum2;
int vexnum;
int edgenum;
vector<vector<int>> edges;
vector<int> parent;
bool bfs();
int fordFulkerson();
int main()
{
/* Input: