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

标签 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

最佳答案

您的伪代码是正确的,这将为您提供一个 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

关于c - 以邻接矩阵作为参数的 Prim MST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11637302/

相关文章:

python - 主程序+配置模块的代码设计

c - YUY2比例算法

javascript - 有效地计算复杂形状的轮廓

algorithm - 是否存在不包含最小/最大加权边的最小生成树?

algorithm - 最小生成树Prims算法中的π[v] ←u步是什么意思?

c - 如何将 Prim 算法转化为 Kruskal 算法?

c - Sublime Text在Windows中编译多个文件

c - 如何将一串数字解析为整数数组?

python - 如何在二维数组中创建来自 2 个不同数组的所有组合

c++ - 两个输入函数的 T(n) 运行时间