实验报告
课程名称 《算法分析与设计》
实验日期 2021 年 3 月 8 日 至 2021 年 3 月 14日
学生姓名 石晨昊 所在班级 计算机194 学号 2019212212322
实验名称 prime算法
实验地点 同组人员
1.问题
在N个点中 找n-1条边,使这n-1条边加起来合最短,每一颗生成树都可以作为一个通信网,当我们构造这个连通网所花的成本最小时,搭建该连通网的生成树,就称为最小生成树。
2.解析
首先就是从图中的一个起点a开始,把a加入U集合,然后,寻找从与a有关联的边中,权重最小的那条边并且该边的终点b在顶点集合:(V-U)中,我们也把b加入到集合U中,并且输出边(a,b)的信息,这样我们的集合U就有:{a,b},然后,我们寻找与a关联和b关联的边中,权重最小的那条边并且该边的终点在集合:(V-U)中,我们把c加入到集合U中,并且输出对应的那条边的信息,这样我们的集合U就有:{a,b,c}这三个元素了,一次类推,直到所有顶点都加入到了集合U。
3.设计
void Prime()
{
for (int i = 2; i <= vertexNum; ++i)
{
lowcost[i] = arc[1][i];
adjvex[i] = 1;
}
lowcost[1] = 0;
for (int i = 2; i <= vertexNum; ++i)
{
int k = MinEdge(lowcost, vertexNum);
cout << k << " " << adjvex[k] << " " << lowcost[k] << endl;
lowcost[k] = 0;
for (int j = 1; j <= vertexNum; ++j)
{
if (arc[k][j] < lowcost[j])
{
lowcost[j] = arc[k][j];
adjvex[j] = k;
}
}
}
}
4.分析
空间复杂度n^2
5.源码