二分图最大匹配

匈牙利算法

class Solution:
    def __init__(self):
        self.adjoin_map = {
                        '1': ['4', '8', '7'],
                        '2': ['3', '2'],
                        '3': ['4', '3'],
                        '4': ['1', '7'],
                        '5': ['1'],
                        '6': ['1'],
                        '7': ['11'],
                        '8': ['9'],
                        '9': ['11', '9']
                    }
        
    def dfs(self,l_node,adjoin_map,l_match,r_match,visited):
        for r_node in adjoin_map[l_node]:
            if r_node not in r_match:
                r_match[r_node] = l_node
                l_match[l_node] = r_node
                return True
            else:
                next_l_node = r_match[r_node]
                if next_l_node not in visited:
                    visited.add(next_l_node)
                    if self.dfs(next_l_node,adjoin_map,l_match,r_match,visited):
                        r_match[r_node] = l_node
                        l_match[l_node] = r_node
                        return True
                    else:
                        return False
                    
    def run(self):
        l_match,r_match = {},{}
        for l_node in adjoin_map.keys():
            self.dfs(l_node,self.adjoin_map,l_match,r_match,set())
        return l_match

            
if __name__ == '__main__':
    s = Solution()
    s.run()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容