以邻接矩阵为参数的Prim MST

时间:2012-07-24 18:45:23

标签: c algorithm minimum-spanning-tree prims-algorithm

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

假设我有一个前驱数组,它追踪到目前为止我找到的最小边。 predecessor[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

1 个答案:

答案 0 :(得分:2)

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

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

 for (x ...)
    for (y ...)
       A[x][y] = 0

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