int pr()
{
int sma=INF,pos,lar=0;
nod[0]=1;
for(int i=0;i<n;i++)
dis[i]=l[0][i]; //先选定任意一个点,把其他与其有直接连线的点的距离存入dis
for(int i=0;i<n;i++)
{
sma=INF;
for(int j=0;j<n;j++){
if(nod[j]==0&&sma>dis[j]) //搜索未被标记的点,如果其与选定点的距离小于已经找到的最小值,记录这个点,从而找出离已经选中集合距离最小的点;
sma=dis[j],
pos=j;
}
if(sma==INF)break; //表示所有点都已经标记
nod[pos]=1; //标记这个点加入最小树;
lar=max(sma,lar); //求出需要建设的路中最长的一条,题目需要
for(int j=0;j<n;j++){
if(nod[j]==0&&dis[j]>l[pos][j])
dis[j]=l[pos][j];
//松弛操作,从刚刚选中的点开始,找它可以通向几个点,比较最初选定点是否可以到这些点以及到这些点的直接距离是否比通过刚刚选定的点短,如果没有,则把dis里面的数值更新成通过此点的距离,
}
}
return lar;
}
dis【j】代表从一个固定点到点j的距离
l【i】【j】代表点i到点j的距离
nod是点的集合,当其值为1时代表此点已经被选入最小生成树中,全部为1时则完成生成树;
dis中全部加起来就是prim求出的最小生成树的值,dis【j】就是起始点到j的最短路;