C 以邻接矩阵为参数的Prim-MST
我正在使用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))
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