一尘不染

切换矩阵中的值的算法

algorithm

有一个Nx的矩阵M,每个元素为01。我们选择一个特定的rc(例如1<=r<=N1<=c<=M),然后从(0,0)到开始(r-1,c-1),切换值。也就是说,0变得110

基本上,每个“ 移动 ”都是在原始矩阵 的左上角 任意子矩阵中切换所有值。

我需要编写一个函数来计算 最小 移动数,以使矩阵的所有元素最终都为1,但不知道如何做。请帮忙。

例如,在以下矩阵(N == 2和M == 4)中:

0  1  0  0
1  0  0  1

完成移动后,(2, 1)我们将得到以下矩阵:(请注意第一列中切换的值,其余矩阵中未更改的值。)

1  1  0  0
0  0  0  1

阅读 263

收藏
2020-07-28

共1个答案

一尘不染

以下应该给你一个想法。

如果从右下角开始,然后向后遍历矩阵,则可以获得“移动”的数量。

让我们move(r,c)按上的按钮进行呼叫r,c

因此,例如,如果N-1,M-1输入为零,那么您将必须在处按一个按钮N-1,M-1。随后,所有条目将被切换。

现在,您可以向后检查最后一行中的每个条目。随后,将最后一列中的每个条目向后检查。

不必实际切换所有条目,而是可以对遍历行时切换“列”的次数和遍历列时切换行的次数进行计数。

现在将N减1,将M减1,然后重复。每个条目的现值应为: Original value ^ number of times its column has been toggled ^ number of times its row has been toggled&1。

2020-07-28