输入:
包含两个不同(可选)值的2D数组。在解释规则时,我将使用0和1。输入格式当然是灵活的。
挑战:
零是水,一个是小岛。为了确保孤独,您的任务是通过插入零行和零列将所有岛屿用水包围。您不想浪费水,因此您必须减少添加的水量。如果有不止一种溶液需要添加相同量的水,则应添加水栏,而不是行。我将在测试案例中展示这一点。
输出:
新的修改后的2D数组。输出格式当然是灵活的。
测试用例:
输入和输出以短划线分隔。添加的零以粗体显示。如果要将测试用例转换为更方便的格式,请在此处使用答案之一。
1
---
1
1 1
---
1 0 1
1 1
1 1
---
1 0 1
0 0 0
1 0 1
1 0
0 1
---
1 0 0
0 0 1
请注意,我们添加了一列零,而不是一列零。这是因为必要的零的数目相等,因此应首选列。
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
---
1 0 0 0 1
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 1 0 1 0
请注意,我们添加了行而不是列,因为这需要最少数量的额外零。
0 0 1 0 0
0 1 1 1 0
---
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 1 0 1 0
这需要列和行。
0 0 1 0 0
0 1 0 1 0
---
0 0 0 1 0 0 0
0 1 0 0 0 1 0
最好增加两列而不是一行,因为它需要更少的水。
0 0
1 0
0 1
1 0
0 0
---
0 0
1 0
0 0
0 1
0 0
1 0
0 0
最好增加两行而不是一列,因为它需要更少的水。
相关的。
—
Stewie Griffin
该死的,Stewie,现在我又把“ Jack Sparrow”塞进了我的脑海!
—
毛茸茸的
这个问题等效于二部图上的顶点覆盖问题,根据Wikipedia的说法,它可以在多项式时间内解决。
—
user202729 '18
我改变了主意...这可能很重要。无论如何,对于足够大的方阵,它(希望)是等效的。因此,如果您的算法“过于简单”,请当心。
—
user202729'4
我想我有一个多项式时间算法。
—
user202729 '18