prim基本思想
普里姆方法的基本思想是:在图中任取一个顶点K作为开始点,令U={k},W=V-U,其中V为图中所有顶点集,然后找一个顶点在U中,另一个顶点在W中的边中最短的一条,找到后,将该边作为最小生成树的树边保存起来,并将该边顶点全部加入U集合中,并从W中删去这些顶点,然后重新调整U中顶点到W中顶点的距离, 使之保持最小,再重复此过程,直到W为空集止。
代码如下:
public class PrimeTest {
图,可以这样认为:图的任意两个顶点之间都有边,两顶点无法到达的,可以认为他们之间的边权是无穷大
static int graph[][]= {{99,6,1,5,99,99},
{6,99,5,99,3,99},
{1,5,99,5,6,4},
{5,99,5,99,99,2},
{99,3,6,99,99,6},
{99,99,4,2,6,99}};
public static void getQuan()
{
boolean[] visited = new boolean[6];
for(int i = 0; i < 6; i++){
visited[i] = false;
}
int sum=0;
int index=0;
visited[0]=true;//从1这个顶点开始
int distance[]=new int[6];
for(int j=0;j<6;j++)
{
distance[j]=graph[0][j];
}
for(int i=0;i<5;i++)
{
int min=99;
for(int j=0;j<6;j++)
{
if(visited[j]==false&&distance[j]<min)
{
min=distance[j];
index=j;
}
}
sum+=min;
visited[index]=true;
for(int j=0;j<6;j++)
{
if(visited[j]==false&&distance[j]>graph[index][j])
{
distance[j]=graph[index][j];
//更新距离,上面又新产生了一个访问过的节点,现在更新所有未访问节点到所有已经访问节点的最小距离
}
}
}
System.out.println(sum);
}
}