Algorithm 一个棋盘上有多少辆车可以躲藏在阻挡者的手上?

Algorithm 一个棋盘上有多少辆车可以躲藏在阻挡者的手上?,algorithm,data-structures,graph,pseudocode,Algorithm,Data Structures,Graph,Pseudocode,您将获得一个m*n棋盘,其中m≤N≤50个带有x阻塞细胞。我们知道被阻断的细胞在哪里,我们知道它们的确切位置 你的工作是提供最大数量的车,你可以放在棋盘上,这样没有两个车攻击对方 任何伪代码,甚至任何语言中的代码都会有帮助 输入输出示例: 在3*3的棋盘上 x=3 阻塞细胞: 0, 0, 0, 1, 0,2 答案=2 在每列的最后一行之后添加阻止程序。 按第一列、第二行对拦截器进行排序。 添加一个数组,每个列中包含第一个阻止程序的索引。 对于每一行,查找未使用的列,每个自由拉伸都有最近的阻止程序

您将获得一个m*n棋盘,其中m≤N≤50个带有x阻塞细胞。我们知道被阻断的细胞在哪里,我们知道它们的确切位置

你的工作是提供最大数量的车,你可以放在棋盘上,这样没有两个车攻击对方

任何伪代码,甚至任何语言中的代码都会有帮助

输入输出示例:

在3*3的棋盘上

x=3

阻塞细胞: 0, 0, 0, 1, 0,2

答案=2

在每列的最后一行之后添加阻止程序。 按第一列、第二行对拦截器进行排序。 添加一个数组,每个列中包含第一个阻止程序的索引。 对于每一行,查找未使用的列,每个自由拉伸都有最近的阻止程序,如果有多个候选项,则任何阻止程序都可以。 将塔放在那里,并标记为已使用。 推进遇到块的所有列,并将列标记为可用。
总之,算法应该在*m+x*logx上运行。

这就是n-rooks问题。您将在该页面上找到多个资源online@sshashank124我没有发现它和堵塞的细胞。我知道如何解决n-rooks问题,但这是一个关于图形的问题。@Deduplicator你能为它添加任何算法或伪代码吗?@MJane必须仔细阅读我写的内容。如果您在一行中最多阻塞n-1个单元,您仍然可以在板上放置n辆车。i、 e.如果在一行或一列中阻塞n个单元格,则不能放置n个rook,这就是您的示例中的n=3。您可以递归地将此逻辑应用于通过放置rook创建的亚n大小的板。每次放置rook时,它都会删除放置rook的行和列,从而创建子对象-board@BAbali是的,现在有道理了。我也尝试过其他样本数据。谢谢我试图证明这是正确的答案。如果一行的第一个单元格被阻塞了怎么办?就像在一个3*3的棋盘上,0,0,1,1,2,2这里的答案应该是3,但是在这个算法中我们只能有2?我们应该为每行的开始和结束执行此操作吗?@MJane有一个小错误,应该被修复。因此,选择从第一个拦截器右侧或左侧最近的块的unused列并不重要。是的,所有未使用的列仅在其第一个拦截器上进行评级,其他方面是相等的。谢谢。我正在写代码。