Algorithm 放置最大数量的车

Algorithm 放置最大数量的车,algorithm,graph,matching,bipartite,Algorithm,Graph,Matching,Bipartite,问题: 我得到了一个NxN棋盘,棋盘上有m个有洞的单元格。我必须找到可以放在上面的最大数量的车,这样每一行或每一列上都有相同数量的车。(请注意,这些车可能会相互攻击) 我试图通过假设每一行和每一列都是一个节点来对此进行建模。如果单元[i][j]不是孔,则在与r\u i对应的节点和与c\u j对应的节点之间添加一条边(容量1)。现在,我必须在这个二部图中找到最大流,同时确保每一行的流和每一列的流相同。我怀疑在最大二部匹配的情况下,这是否等于从行/到列的流中的最小值。这句话能被证明/反驳吗?有没有其

问题: 我得到了一个
NxN
棋盘,棋盘上有
m
个有洞的单元格。我必须找到可以放在上面的最大数量的车,这样每一行或每一列上都有相同数量的车。(请注意,这些车可能会相互攻击)


我试图通过假设每一行和每一列都是一个节点来对此进行建模。如果
单元[i][j]
不是孔,则在与
r\u i
对应的节点和与
c\u j
对应的节点之间添加一条边(容量1)。现在,我必须在这个二部图中找到最大流,同时确保每一行的流和每一列的流相同。我怀疑在最大二部匹配的情况下,这是否等于从行/到列的流中的最小值。这句话能被证明/反驳吗?有没有其他方法可以解决这个问题?

你可以很清楚地将其设置为整数线性规划中的一个问题,但当然不能保证生成的整数线性规划是可处理的。如果你准备尝试从i=1..N开始的所有可能的车数,那么对于最大流量方法,你可以设置最大流量每行的最大流量和每列的最大流量,这将为您提供无任何非标准约束的最大流量问题。此外,在没有任何输入或输出容量的情况下解决最大流量问题,可以为列中的rooks数提供一个上限。@mcdowella尝试从i=1..N开始的所有可能的rooks数是一个好主意。我们甚至可以对答案进行二进制搜索,将检查次数从N减少到log(N)。能不能再减一点?对不起,这是我能做的最好的了。事实上,我甚至不清楚,如果有一个特定数量的根的解决方案,那么对于每一个较少数量的rook,必然会有一个解决方案,尽管我现在相信你是正确的,确实有。