武汉理工大学《数据结构》课程设计说明书
{
int lowcost[max],closest[max];
int i,j,k,min;
for(i=2;i<=n;i++)
{
lowcost[i]=g[1][i];
closest[i]=1;
}
lowcost[1]=0;
for(i=2;i<=n;i++)
{
min=inf;
k=0;
for(j=2;j<=n;j++)
/*n 个顶点,n-1 条边*/
/*初始化*/
/*顶点未加入到最小生成树中*/
/*标志顶点 1 加入 U 集合*/
/*形成 n-1 条边的生成树*/
/*寻找满足边的一个顶点在 U,另一个顶点
在 V 的最小边*/
if((lowcost[j]
武汉理工大学《数据结构》课程设计说明书
printf("\n");
}
}
3.2.2 下面的代码实现的邻接矩阵的输出:
void prg(int g[][max],int n)
{
/*输出无向图的邻接矩阵*/
int i,j;
for(i=0;i<=n;i++)
printf("%d\t",i);
for(i=1;i<=n;i++)
{
printf("\n%d\t",i);
for(j=1;j<=n;j++)
if(g[i][j]==inf)
printf("inf\t");
else
printf("%d\t",g[i][j]);
}
printf("\n");
}
3.3 有关技术的讨论
算法是指完成一个任务准确而完整的描述。也就是说给定初始状态或输入数
据,经过计算机程序的有限次运算,能够得出所要求或期望的终止状态或输出数
据。最小生成树是数据结构中图的一种重要应用,它的要求是从一个带权无向完
全图中选择 n-1 条边并使这个图仍然连通,也即得到了一棵生成树,同时还要
考虑使树的权最小。
为了得到最小生成树,人们设计了很多算法,最著名的有 prim 算法和
kruskal 算法。其中 prim 算法的精巧之处在于对求权值最小的边这一问题的分
解,从而大大减小了计算量。让算法的时间复杂度大幅度减小。
Prim 算法是贪心算法这类算法中一种非常典型的算发,所谓贪心法的基本
思路,
即从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更
好的解。当达到某算法中的某一步不能再继续前进时,算法停止。贪心算法总是
作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出
的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果
8