Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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/4/algorithm/12.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/4/oop/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
C 以邻接矩阵为参数的Prim-MST_C_Algorithm_Minimum Spanning Tree_Prims Algorithm - Fatal编程技术网

C 以邻接矩阵为参数的Prim-MST

C 以邻接矩阵为参数的Prim-MST,c,algorithm,minimum-spanning-tree,prims-algorithm,C,Algorithm,Minimum Spanning Tree,Prims Algorithm,我正在使用C语言中的Prim MST,函数采用邻接矩阵。考虑到课程在A[i][j]中的权重 假设我有一个前置数组,它跟踪到目前为止我找到的最小边。 前置[u]=v{这也是最后一个MST} 现在我想修改当前的A[I][j]矩阵,并将权重更改为1。 此时,边(索引)也存在于前置数组中。 否则我把它改为零 我该怎么做?以下是我的解决方案: for (x....) for (y...) if (x!=y && (p[x]==y || p[y]==x))

我正在使用C语言中的Prim MST,函数采用邻接矩阵。考虑到课程在
A[i][j]
中的权重

假设我有一个前置数组,它跟踪到目前为止我找到的最小边。
前置[u]=v
{这也是最后一个MST}

现在我想修改当前的
A[I][j]
矩阵,并将权重更改为1。 此时,边(索引)也存在于前置数组中。 否则我把它改为零

我该怎么做?以下是我的解决方案:

for (x....)
   for (y...)
      if (x!=y && (p[x]==y || p[y]==x))
         set to 1
      else
         set to 0

您的伪代码是正确的,这将为您提供一个0-1矩阵,它表示由Prim算法找到的树。然而,这种存储方法相当昂贵,因为它需要O(n^2)空间,而树可以存储在O(n)内存中

或者,您可以在O(n^2)中将矩阵初始化为零,然后在O(n)时间内添加边:


看起来不错。。。你真正的问题是什么?我不太确定还有什么需要检查的:你会怎么做?正是你那样做的。。。或者可能是sdcwc的回答
 for (x ...)
    for (y ...)
       A[x][y] = 0

 for (x ...)
    if (p[x] != x)
      A[x][p[x]] = A[p[x]][x] = 1