1.解决问题图的所有节点相连路线最短
2.解题思路
3.代码实现
package com.hy.tenalgorithm;
import java.util.Arrays;
/**
* @author hanyong
* @date 2020/7/17 23:40
*/
public class PrimAlgorithm {
public static void main(String[] args) {
char data[] = {‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘};
int verxs = data.length;
int[][] weight = new int[][]{
{10000, 5, 7, 10000, 10000, 10000, 2},
{5, 10000, 10000, 9, 10000, 10000, 3},
{7, 10000, 10000, 10000, 8, 10000, 10000},
{10000, 9, 10000, 10000, 10000, 4, 10000},
{10000, 10000, 8, 10000, 10000, 5, 4},
{10000, 10000, 10000, 4, 5, 10000, 6},
{2, 3, 10000, 10000, 4, 6, 10000},};
//创建MGraph对象
MGraph mGraph = new MGraph(verxs);
//创建 MinTree对象
MinTree minTree = new MinTree();
minTree.createMGraph(mGraph, verxs, data, weight);
minTree.showMGraph(mGraph);
minTree.prim(mGraph, 1);
}
}
class MinTree {
//创建图的邻接矩阵
/**
* @param graph 图对象
* @param verxs 图对应的顶点个数
* @param data 图的各个顶点值
* @param weight 图的邻接矩阵
*/
public void createMGraph(MGraph graph, int verxs, char data[], int[][] weight) {
int i, j;
for (i = 0; i < verxs; i++) {
graph.data[i] = data[i];
for (j = 0; j < verxs; j++) {
graph.weight[i][j] = weight[i][j];
}
}
}
//显示图的邻接矩阵
public void showMGraph(MGraph graph) {
int[][] weight = graph.weight;
for (int[] line : weight) {
System.out.println(Arrays.toString(line));
}
}
public void prim(MGraph graph, int v) {
int[] visited = new int[graph.verxs];
/*for(int i=0;i<graph.verxs;i++){
visited[i]=0;//表示所有节点都未被访问
}*/
visited[v] = 1;
//记录两个顶点的下标
int h1 = -1;
int h2 = -1;
int minWeight = 10000;
//verxs个顶点 就是verxs-1条边
for (int i = 1; i < graph.verxs; i++) {
for (int j = 0; j < graph.verxs; j++) {
for (int k = 0; k < graph.verxs; k++) {
if (visited[j] == 1 && visited[k] == 0 && graph.weight[j][k] < minWeight) {
//寻找已经访问过的节点和他没有访问过的节点可以连通的最小权值的点,并把最小权值替换成较小的
minWeight = graph.weight[j][k];
h1 = j;
h2 = k;
}
}
}
System.out.println("边" + graph.data[h1] + "" + graph.data[h2] + "权值:" + minWeight);
visited[h2] = 1;
minWeight = 10000;
}
}
}
class MGraph {
int verxs;//表示图的节点个数
char[] data;//存放节点数据
int[][] weight;//存放边,也就是邻接矩阵
public MGraph(int verxs) {
this.verxs = verxs;
data = new char[verxs];
weight = new int[verxs][verxs];
}
}
原文:https://www.cnblogs.com/yongzhewuwei/p/13334321.html