匈牙利算法(简单易懂)
之前在网上看了一些匈牙利算法的题解,发现有两种情况:1.看不懂算法描述 2.看得懂算法描述,看不懂代码
1.二分图的定义
通俗点讲,就是有两个班的学生,可能A班的学生x和B班的学生y同意互相抄作业(两方都同意,即两个人都不会向老师打小报告),但是因为每个班的班主任很严,他们不允许自班到两个同学互相抄作业,也就是说A班的两个学生不能互相抄作业,B班的两个学生也不能互相抄作业。将每个学生看成一个点,互相抄过作业的连一条边,就是一个二分图。如图:
二分图最大匹配
但是,可能会出现这种情况:A班的学生x同意和B班的所有人互相抄作业,A班的学生y只同意和B班到学生z抄作业,如果x和z一起抄作业,z就不想和y互相抄作业了(作业抄一份就够了),那么这样就会引发学生x和学生y的矛盾(因为学生y抄不了作业了)。于是,我们希望找到一种抄作业的分配方式,使不能抄作业的人最少。
匈牙利算法流程
学生1说:我要抄A的作业!(后话:如愿以偿)
学生2