最小生成树之普利姆算法

最小生成树-普利姆算法-Java版(无向图)

package 最小生成树之普利姆算法;
import java.lang.Integer;
class MGraph{
	public int[][] arc;
	public int vertices;
	public MGraph(int n){
		vertices = n;
		arc = new int[n][n];
	}
	public void addEdge(int i,int j){
		if(i==j){
			return;
		}
		arc[i][j]=1;
	}
}
public class Prim {
	public void MiniSpanTree_Prim(MGraph G){
	        int min,i,j,k=0; //k仅仅作为个临时保存变量
		int[] adjvex = new int[G.vertices];  //保存相关顶点下标  可以不加
		int[] lowcost = new int[G.vertices];
		lowcost[0] = 0;//初始化第一个第一个权值为0,即v0加入生成树
		//adjvex[0] = 0;
		//循环标记除下标为0外的全部顶点,初始化后就不为0了
		for(i=1;i<G.vertices;i++){
			lowcost[i] = G.arc[0][i]; 
		}
		System.out.println("从0开始");
		for(i=1;i<G.vertices;i++){
			min=Integer.MAX_VALUE;
			j=1;
			while(j<G.vertices){
				if(lowcost[j]!=0&&lowcost[j]<min){
					min = lowcost[j];
					k = j;
				}
				j++;
			}
			System.out.printf("接下来到的结点值:%d,距离最小值:%d",k,min);
			System.out.println();
			lowcost[k]=0;
			//此段循环用于使得整体lowcost最小,便于下段(上面)循环找出(输出)
			for(j=1;j<G.vertices;j++){
				if(lowcost[j]!=0&&G.arc[k][j]<lowcost[j]){
					lowcost[j] = G.arc[k][j];
					//adjvex[j] = k;
				}
			}
		}
		
	}
	public static void main(String[] args) {
		MGraph graph = new MGraph(6);
		int[][] temp={{65535,6,1,5,65535,65535},  
                {6,65535,5,65535,3,65535},  
                {1,5,65535,5,6,4},  
                {5,65535,5,65535,65535,2},  
                {65535,3,6,65535,65535,6},  
                {65535,65535,4,2,6,65535}};  
		graph.arc=temp;
		new Prim().MiniSpanTree_Prim(graph);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_27378875/article/details/81166816