最小生成树---prime算法

生成树顶点集合,初始只含起点 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();
	}
	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值