Prim算法的JAVA实现

1.算法思想

设有向图G的顶点集合为V={1,2,...,n},初始选择一个顶点加入 “已选集合”S中,选择连接S与V-S集合的最短边e=(i,j),其中i∈S,j∈V-S,将e加入树T中,j加入S,一直执行上述操作直到S=V为止。

2.JAVA代码

	static int MAX = Integer.MAX_VALUE;  
	
	static void prim(int[][] graph, int n){
		  char[] c = new char[]{'A','B','C','D','E','F','G','E','F'};    
		  int[] lowcost = new int[n];	到新集合的最小权
		  int[] closest= new int[n];//存取前驱结点  
		  boolean[] s = new boolean[n]; //已选入的点 记录在s集合中
		  s[0] = true;
		  
		  for(int i=1;i<n;i++){
			  lowcost[i] = graph[0][i];	//初始的最短距离 是0号顶点到其他n-1个节点的距离
			  closest[i] = 0;	//此时的前驱就是0号顶点
			  s[i] = false;
		  }
		  
		  for(int i=1;i<n;i++){
			  int min = MAX;
			  int index = 0;
			  //遍历lowcost数组,每次找到距离集合最近的点 
			  for(int j=1;j<n;j++){
				  if(!s[j] && lowcost[j]<min){
					  min = lowcost[j];
					  index = j;
				  }
			  }
			  
			  s[index] = true;
			  System.out.println(c[closest[index]] + "到" + c[index] + " 权值:" + min);
			  
			  //加入该点后,更新其它点到集合的距离
			  for(int j=1;j<n;j++){
				  if(!s[j] && lowcost[j]>graph[index][j]){
					  lowcost[j] = graph[index][j];
					  closest[j] = index;
				  }
			  }
		  }
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值