使用2个不同的数字填充2D数组,但每个数字必须放在相同数字旁边

时间:2015-10-05 14:03:24

标签: arrays algorithm random multidimensional-array

我试图用0和1随机填充2d数组。条件是每个1必须垂直或水平地“放置”在另一个1旁边,而不是对角线。

http://prntscr.com/8nzl19 在屏幕截图中,您会看到3个1s的块。我希望它们“连接”,这样只有一个1s的块。

是否有任何算法或其他事情要做?

1 个答案:

答案 0 :(得分:-1)

由于一个简单的方法是用1填充整个矩阵,我假设你想要0的最小数量转为1。

您可以使用以下方法:

  • 查找矩阵中1的所有组件。 (给它们一个标识符,让我们称之为A,B,C的那些)
  • 创建矩阵的副本。
  • 选择A.从所有" outpoints中做BFS" A(由至少一个0包围)到其他连通分量(B,C)。 (当然是最短路径的BFS)
  • 现在在原始矩阵中,用(例如)2'标记这些点。
  • 使用B和C重复上述2个步骤。如果需要,可以使用不同的路径标识符填充初始矩阵。 (3为B,4为C等)

现在,将图1中的连接1和节点以及2,3,等等视为边缘。边缘权重(显然)将是从一个节点到另一个节点的2&2,3>等的数量。您现在可以使用Prims或Kruskals算法形成此图的MST。

对于k连通分量为1的(n * n)矩阵,该算法采用O(k * n * n)+ O(k * k)复杂度。