Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 用2个不同的数字填充二维数组,但每个数字必须放在一个相等的数字旁边_Arrays_Algorithm_Random_Multidimensional Array - Fatal编程技术网

Arrays 用2个不同的数字填充二维数组,但每个数字必须放在一个相等的数字旁边

Arrays 用2个不同的数字填充二维数组,但每个数字必须放在一个相等的数字旁边,arrays,algorithm,random,multidimensional-array,Arrays,Algorithm,Random,Multidimensional Array,我试图用0和1随机填充二维数组。条件是每个1必须垂直或水平地“放置”在另一个1的旁边,但不是对角放置 在屏幕截图上,您可以看到3块1。我希望它们“连接”,这样只有一个1块 有没有什么算法或什么东西可以做到这一点 因为一种简单的方法是用1填充整个矩阵,所以我假设您希望将最小数量的0变成1 以下是您可以使用的方法: 在矩阵中找到1的所有组件。(给它们一个标识符,让我们把例子中的这些称为A、B、C) 创建矩阵的副本 选择A。从A的所有“输出点”(周围至少有一个0)到其他连接组件(B、C)进行BFS

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

在屏幕截图上,您可以看到3块1。我希望它们“连接”,这样只有一个1块


有没有什么算法或什么东西可以做到这一点

因为一种简单的方法是用1填充整个矩阵,所以我假设您希望将最小数量的0变成1

以下是您可以使用的方法:

  • 在矩阵中找到1的所有组件。(给它们一个标识符,让我们把例子中的这些称为A、B、C)
  • 创建矩阵的副本
  • 选择A。从A的所有“输出点”(周围至少有一个
    0
    )到其他连接组件(B、C)进行BFS。(当然,最短路径的BFS)
  • 现在在原始矩阵中,用(比如)2标记这些点
  • 同样对B和C重复上述两个步骤。如果需要,可以用不同的路径标识符填充初始矩阵。(3代表B,4代表C等)

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


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

你所说的连通是什么意思?我不完全明白你的问题。你说的
不是对角线的
是什么意思??如果把你的例子看作7x7矩阵,<代码> 1代码>代码< >(2,2)< /代码>和<代码> 1代码> <代码>(3,1)< /代码>被对角线放置。不是吗?每个0也必须放在另一个0的旁边吗?首先用0填充数组,然后随机地将1放在已经存在的0旁边,当然前1除外。这需要更正式的描述。“随机”是什么意思?您想从所有可能的电路板中统一取样吗?这可能很难做到。理论方法是:随机填充+检查约束是否满足。这就是拉斯维加斯的某种算法,可能永远不会停止在大棋盘上!什么对答案沉默的否决票毫无意义。如果你曾否决过任何答案,请说明原因(除非显而易见)。