prim算法(最小生成树)
Prim 算法 解决最小生成树问题!!
假设从该图中查找最小生成树:

prim算法是从一个点开始寻找与所生成树权值最小的路径:
会用到三个数组:
w[][]表示结点之间的权值
Min[]表示结点与生成树相连的最小权值
B[]表示结点是否被选取
true表示未选择
false表示已选择
以下图中,绿色为权值,红色为结点与生成树相连的最小权值,橙色表示已选中的结点。
一般情况下,选择编号为1的结点作为起始点,

数组情况
很显然下一个就是选择的结点编号为2;
(抱歉4和5标反了0.0)
同理:
然后:




就这样一步一步完成!!
代码主体
初始化:MST = 0; Min[] = {0x3f3f3f3f}; Min[1] = 0;
for (int i = 1; i <= n; i++)
{
k = 0;
for (int j = 1; j <= n; j++)
{
if (B[j] && Min[j] < Min[k])
k = j;
}
MST+=Min[k];
B[k] = false;
for (int j = 1; j <= n; j++)
{
if (B[j] && Min[j] > w[k][j])
Min[j] = w[k][j];
}
}

浙公网安备 33010602011771号