【发布时间】:2012-12-15 09:22:13
【问题描述】:
问题来了:我得到了一个类似的矩阵
输入:
1 1 1
1 1 1
1 1 1
在每一步,我都需要找到一个由 1 和 0 组成的“第二个”矩阵,在同一行或同一列上没有两个 1。然后,我将从原始矩阵中减去第二个矩阵。我将重复这个过程,直到我得到一个全为 0 的矩阵。此外,我需要采取尽可能少的步骤。
我需要在 O(n) 时间内打印所有“第二个”矩阵。在上面的例子中,我可以通过按顺序减去这三个矩阵,分 3 步得到空矩阵:
预期输出:
1 0 0
0 1 0
0 0 1
0 0 1
1 0 0
0 1 0
0 1 0
0 0 1
1 0 0
我编写了一次尝试,其中我找到了第一个最大值并根据该值的索引创建第二个矩阵。但是对于上述输入,我得到了 4 个输出矩阵,这是错误的:
我的输出:
1 0 0
0 1 0
0 0 1
0 1 0
1 0 0
0 0 0
0 0 1
0 0 0
1 0 0
0 0 0
0 0 1
0 1 0
我的解决方案适用于大多数测试用例,但不适用于上面给出的那个。有人可以给我一些关于如何进行的指示,或者找到一种保证最优性的算法吗?
有效的测试用例:
输入:
0 2 1
0 0 0
3 0 0
输出
0 1 0
0 0 0
1 0 0
0 1 0
0 0 0
1 0 0
0 0 1
0 0 0
1 0 0
【问题讨论】:
-
您能解释一下您要做什么吗?从你给出的例子中我真的看不出来。
-
我没有使用任何算法...我只是获取行/列最大值并递减第一个非零值。
-
行/列最大值是什么意思?
-
我正在尝试以最少的迭代次数达到全 0 .. 一行最多可以减少一列的值,反之亦然在一个循环中...
-
例如,在 3x3 矩阵中,行/列最大值为 3。我正在选择...
标签: java algorithm optimization graph matrix