题意:有一个n*n的矩阵,在矩阵上有m个行星,一个武器可以消灭同一行或者同一列的星星
求最小的要用多少武器消灭所有的星星
思路:把方阵看做一个特殊的二分图(以行列分别作为两个顶点集V1、V2,其中|V1|=|V2|)
然后把每行x或者每列y看成一个点,而障碍物(x,y)可以看做连接x和y的边。按照这种思路建图,问题就转化成为选择最少的一些点(x或y),使得从这些点与所有的边相邻,其实这就是最小点覆盖问题。
最小点覆盖数 = 最大匹配数
这样本题就转化为求最大匹配数了
本文介绍了一道经典的算法题目,通过将问题抽象为二分图的最大匹配问题来解决最小点覆盖的问题。详细解析了如何利用深度优先搜索实现匈牙利算法求解最大匹配数,进而得出最小点覆盖数。
题意:有一个n*n的矩阵,在矩阵上有m个行星,一个武器可以消灭同一行或者同一列的星星
求最小的要用多少武器消灭所有的星星
思路:把方阵看做一个特殊的二分图(以行列分别作为两个顶点集V1、V2,其中|V1|=|V2|)
然后把每行x或者每列y看成一个点,而障碍物(x,y)可以看做连接x和y的边。按照这种思路建图,问题就转化成为选择最少的一些点(x或y),使得从这些点与所有的边相邻,其实这就是最小点覆盖问题。
最小点覆盖数 = 最大匹配数
这样本题就转化为求最大匹配数了
295

被折叠的 条评论
为什么被折叠?