可以用棋子在棋盘上藏多少只白嘴鸦?

问题描述 投票:1回答:1

您将得到一个m * n棋盘(其中m≤n≤50),其中有x个被阻止的单元格。我们知道被阻塞的单元格在哪里,并且知道它们的确切位置。

您的工作是提供最多可以放在棋盘上的白嘴鸦,这样就不会有2个白嘴鸦互相攻击。

任何伪代码或任何语言的代码都将有所帮助。

输入输出样本:

在3 * 3棋盘上,

x = 3

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

answer = 2

algorithm data-structures graph pseudocode
1个回答
0
投票
在每列的最后一行之后添加一个阻止程序。
    对阻止程序进行排序。
  1. 添加一个指向每个列中第一个阻止程序的指针的数组。
  2. 束缚每列的阻止程序。
  3. 对于每一行,请在每次自由延伸中找到最接近阻止者的列(如果有多个候选者,则将执行任何操作)。
  4. 将塔放在那里。
    1. 将放置塔的行和所有列中遇到的所有块前进到下一个阻止程序。
  • 全部,该算法应以O(n * m + x * log(x))运行。
  • © www.soinside.com 2019 - 2024. All rights reserved.