输入:
包含两个不同(可选)值的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