Prim :大体思路就是:
先建图 边代表权重,如果边不存在 那么它等于manx;
1:找一个点为起点
2.更新最短路径数组
3找到最短的边,加进去,标记那个点为已经用过
4以这个点为起点。
重复上述过程
最后的出来的图就是最小图 时间大概为o(n平方),因此一般用于稠密图
代码如下
d[a]就是指边的权重,每次加边都要更新
vis是指这个点有没有呗用过
define manx 9999999
void Prime(int a)(a为起点)
{
int ans,k,mine;//ans为最终结果 ,k为我这次要加的点 ,让vis【k】=0,以k为新点更新数组
memset(vis,0,sizeof(vis));//初始化数组
for(int i=0;i<n;i++)//初始化数组
d[i[=manx;
d[a]=0;
for(int i=0;i<n;i++)
{
mine=manx;
for(int j=0;j<n;j++)
{
if(vis[j]==0&&d[i]<mine)
{
k=j;
mine=d[i]
}
vis[k]==1;
ans+=d[k];
for(int i=0;i<n;i++)
{
if(!vis[i]&&w[k][i]<d[i])
{
d[i]=w[k][i];
}
}
}
}
搞完了Prim 我们来搞一搞Kru吧