有多少个车可以躲在有阻挡器的棋盘上?

How many rooks can hide on a chess board with blockers?

给你一个 m * n 的棋盘(其中 m≤n≤50 ),其中有 x 个格子。我们知道被封锁的细胞在哪里,我们知道它们的确切位置。

你的工作是提供你可以在棋盘上放置的车的最大数量,这样就不会有 2 个车互相攻击。

任何伪代码甚至任何语言的代码都会有所帮助。

输入输出样本:

在3*3的棋盘中,

x = 3

已阻止的单元格: (0, 0), (0, 1), (0, 2)

答案 = 2

  1. 在每列的最后一行之后添加一个拦截器。
  2. 先按列再按行对阻止程序进行排序。
  3. 添加一个数组,其中包含每列中第一个拦截器的索引。
  4. 对于每一行,在每个自由伸展中找到具有最近阻塞物的未使用列(如果有多个候选者,任何一个都可以)。
    1. 在那里放置塔并标记为已使用。
    2. 推进遇到块的所有列并将列标记为可用。

总而言之,算法应该 运行 在 O(n * m + x * log(x)).