求最小生成树_普里姆算法(Prim)

来源:互联网 发布:2007詹姆斯数据 编辑:程序博客网 时间:2024/05/29 23:47

package com.test;import java.util.Arrays;// 求最小生成树----普里姆算法(Prim)public class MiniSpanTreePrim {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] = Integer.MAX_VALUE;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("图的邻接矩阵:");for (int i = 0; i < vertexNumber; i++) {for (int j = 0; j < vertexNumber; j++) {System.out.print(arr[i][j] + "\t");}System.out.println();}System.out.println("------------------------");// 开始生成最小树--prim(默认从v0开始)int[] vertexIndex = new int[vertexNumber];// 保存顶点索引int[] minWeightArr = new int[vertexNumber];// 保存相关顶点间的权值// 把第一行权值存入minWeightArrfor (int i = 0; i < vertexNumber; i++) {minWeightArr[i] = arr[0][i];// 将于v0顶点相关的顶点存入minWeight}for (int i = 1; i < vertexNumber; i++) {// int minWeight = Integer.MAX_VALUE;// 最小权值int minWeight = 65535;// 最小权值int j = 0;// 顶点下标循环变量int k = 0;// 最小权值顶点下标// 找出minWeightArr中最小的权值while (j < vertexNumber) {if (minWeightArr[j] != 0 && minWeightArr[j] < minWeight) {minWeight = minWeightArr[j];k = j;}j++;}System.out.print(Arrays.toString(vertexIndex) + "\t");System.out.print(Arrays.toString(minWeightArr) + "\t");System.out.println("( " + vertexIndex[k] + " , " + k + " ) ");minWeightArr[k] = 0;// 找出第k行中,较小的权值存入minWeightArrfor (j = 1; j < vertexNumber; j++) {if (minWeightArr[j] != 0 && arr[k][j] < minWeightArr[j]) {minWeightArr[j] = arr[k][j];vertexIndex[j] = k;}}}}}

输出结果:

图的邻接矩阵:01065535655356553511655356553565535100186553565535655351665535126553518022655356553565535655358655356553522020655352416216553565535655352002665535765535116553565535655352601765535655356553516655352465535170196553565535655356553516765535190655356553512821655356553565535655350------------------------[0, 0, 0, 0, 0, 0, 0, 0, 0][0, 10, 65535, 65535, 65535, 11, 65535, 65535, 65535]( 0 , 1 ) [0, 0, 1, 0, 0, 0, 1, 0, 1][0, 0, 18, 65535, 65535, 11, 16, 65535, 12]( 0 , 5 ) [0, 0, 1, 0, 5, 0, 1, 0, 1][0, 0, 18, 65535, 26, 0, 16, 65535, 12]( 1 , 8 ) [0, 0, 8, 8, 5, 0, 1, 0, 1][0, 0, 8, 21, 26, 0, 16, 65535, 0]( 8 , 2 ) [0, 0, 8, 8, 5, 0, 1, 0, 1][0, 0, 0, 21, 26, 0, 16, 65535, 0]( 1 , 6 ) [0, 0, 8, 8, 5, 0, 1, 6, 1][0, 0, 0, 21, 26, 0, 0, 19, 0]( 6 , 7 ) [0, 0, 8, 7, 7, 0, 1, 6, 1][0, 0, 0, 16, 7, 0, 0, 0, 0]( 7 , 4 ) [0, 0, 8, 7, 7, 0, 1, 6, 1][0, 0, 0, 16, 0, 0, 0, 0, 0]( 7 , 3 ) 


原创粉丝点击