普里姆算法--最小生成树

来源:互联网 发布:雷云mac版安装失败 编辑:程序博客网 时间:2024/04/30 20:54

代码如下:

public class Prim {public static void main(String[] args){int vertexNumber =9;int[][] arr = new int[vertexNumber][vertexNumber];for (int i = 0; i < vertexNumber; i++) {              for (int j = 0; j < vertexNumber; j++) {                  if (i == j) {                      arr[i][j] = 0;                  } else {                        arr[i][j] = 65535;                  }              }}arr[0][1] = 10;          arr[0][5] = 11;          arr[1][0] = 10;          arr[1][2] = 18;          arr[1][6] = 16;          arr[1][8] = 12;          arr[2][1] = 18;          arr[2][3] = 22;          arr[2][8] = 8;          arr[3][2] = 22;          arr[3][8] = 21;          arr[3][6] = 24;          arr[3][7] = 16;          arr[3][4] = 20;          arr[4][3] = 20;          arr[4][7] = 7;          arr[4][5] = 26;          arr[5][0] = 11;          arr[5][6] = 17;          arr[5][4] = 26;          arr[6][1] = 16;          arr[6][5] = 17;          arr[6][3] = 24;          arr[6][7] = 19;          arr[7][6] = 19;          arr[7][3] = 16;          arr[7][4] = 7;          arr[8][1] = 12;          arr[8][2] = 8;          arr[8][3] = 21;        System.out.println("最小生成树为:");        minSpanTree_Prim(arr);}public static void minSpanTree_Prim(int[][] arr){int min,j,k;int count =0;int[] adjvex = new int[arr.length];  //保存相关顶点下标int[] lowcast = new int[arr.length]; //保存相关点间边的权值lowcast[0] = 0;    //初始化第一个权值为0,即v0加入生成树                   //lowcast的值为0,在这里就是此下标的顶点已经加入生成树adjvex[0] =0;      //初始化第一个顶点下标为0for(int i=1;i<arr.length;i++){ //循环除下标为0的全部顶点lowcast[i] = arr[0][i];  //将v0顶点与之有边的权值存入数组adjvex[i] =0;            //初始化都为v0的下标}for(int i=1;i<arr.length;i++){min = 65535;   //初始化最小权值为65535j=1;k=0;while(j<arr.length){    //循环全部顶点if(lowcast[j]!=0&&lowcast[j]<min){ //如果权值不为零且权值小于minmin = lowcast[j]; //则让当前权值成为最小值k=j;  //则将当前最小的下标存入k}j++;}count+=lowcast[k];System.out.println(adjvex[k]+"  "+k+"  "+count);//打印当前顶点边中权值最小边lowcast[k] =0;//将当前顶点的权值置为0,表示此顶点已经完成任务for(j =1;j<arr.length;j++){if(lowcast[j]!=0&&arr[k][j]<lowcast[j]){//若下标为k顶点各边权值小于此前这些顶点未被加入生成树权值lowcast[j]=arr[k][j];  //将较小权值存入lowcastadjvex[j]=k;  //将下标为k的顶点存入adjvex}}}}}


0 0
原创粉丝点击