普里姆算法思想:
1.有二维数组[][].
2.定一点到其他点的权值Low[]。
3.找到该点到其他点的权值的最小值;
通俗来说:就是找的一个点,一路不重复地加入新的最小权值,直到所有的点加完。(条件所有的点都可以连接)。
1.有二维数组[][].
2.定一点到其他点的权值Low[]。
3.找到该点到其他点的权值的最小值;
4.到前r[v]--新v值是标志当前点到某点的标号。
#define Max 7000
int n,m;
int e[Max][Max];
int low[Max];
int r[Max];
int prim()
{
int i,j;
int sumweight=0;
for(i=0;i<n;i++)
{
low[i]=e[0][i];
r[i]=0;
}
r[0]=-1;
for(i=0;i<n;i++)
{
int min=Max;
int v=-1;
for(j=0;j<n;j++)
{
if(r[j]!=-1&&low[j]<min)
{
v=j;
min=low[j];
}
}
if(v!=-1)
{
r[v]=-1;
sumweight+=low[v];
for(j=0;j<n;j++)
{
if(r[j]!=-1&&e[v][j]<low[j])
{
low[j]=e[v][j];
r[j]=v;
}
}
}
}
return sumweight;
}
通俗来说:就是找的一个点,一路不重复地加入新的最小权值,直到所有的点加完。(条件所有的点都可以连接)。