生成树顶点集合,初始只含起点 v0。
visit[i]=1:i点已在生成树中
lowcost[i]:生成树中的点 到顶点 i 的最短距离。
算法过程:
1.初始化生成树,一开始只将起点 v0 加入到 树中。
2.初始化 lowcost 数组,初值为 v0 到各顶点的距离,无边则为 INF。
重复以下步骤,直到所有顶点都在 S 中为止:
1.将 lowcost 值最小的顶点 k 加入到 S 中。
2.更新与顶点 k 相邻顶点的 lowcost 值。
(
如果与K相邻的顶点没有在生成树中,即对应顶点的visit[]数组中的数据为0,
并且与K相邻的顶点的权值小于lowcost数组中到该顶点的距离,则lowcost中到该顶点的值更新为那条边的权值。
)
public class Prime_Algorithm {
static private int points=6;
static private int[]visit= {1,0,0,0,0,0};
static private int lowcost[]= {0,1,2,100,100,100};//存放 S 到顶点 i 的最短距离
static private int[][]side= {{0,1,2,100,100,100},
{1,0,6,11,100,100},
{2,6,0,9,13,100},
{100,11,9,0,7,3},
{100,100,13,7,0,4},
{100,100,100,3,4,0}
};
static void prime()
{
int sum=0;
int k=-1;
for(int i=0;i<points-1;i++)
{
int min=1000;
for(int j=0;j<points;j++)
{
if(visit[j]==0&&lowcost[j]!=0&&lowcost[j]<min)
{
min=lowcost[j];
k=j;
}
}
visit[k]=1;
sum+=lowcost[k];
System.out.println("lowcost== "+lowcost[k]);
//
for(int j=0;j<points;j++)
{
//更新lowcast
if(visit[j]==0&&lowcost[j]>side[k][j])
lowcost[j]=side[k][j];
}
}
System.out.println("sum="+sum);
}
public static void main(String[] args)
{
prime();
}
}