需要的最小攻击次数

时间:2013-10-04 13:46:54

标签: algorithm

我们给出了2维细胞网格。每个细胞可能包含也可能不包含怪物。

我们获得了一个包含怪物的单元格列表。

在一次攻击中,我们可以杀死所有站成一排或一列的怪物。我们 需要告诉消灭所有怪物所需的最小攻击次数。

约束:

1 ≤ N ≤ 1000

1 ≤ X, Y ≤ 10^9

示例:

输入:

3

0 0

1 0

0 1

输出:

2

如何解决这个问题.. ??

2 个答案:

答案 0 :(得分:3)

这可以建模为图形问题。

为每个有怪物的行和列创建一个图形节点。 如果怪物在该行和该列上,则连接节点。

这是一个二分图,你想做最小的顶点覆盖。 König's theorem表明,对于二分图,问题与最大匹配问题是等价的,可以在polinomial时间内解决:

http://en.wikipedia.org/wiki/Maximum_matching#Maximum_matchings_in_bipartite_graphs

答案 1 :(得分:0)

这让我想起了Set Cover Problem

你有一套U来存储N怪物:U = {1, 2, ..., N},可能会有S次攻击。每次攻击都是攻击杀死的怪物的一组索引。在您的示例中,SS = { {1}, {2}, {}, {1}, {2} }。您必须找到C中联合为S的最小集合U