以下是Java代码实现Prim算法建立最小生成树:

import java.util.*;

public class PrimAlgorithm {

    private static final int INF = Integer.MAX_VALUE; // 无穷大

    public static void main(String[] args) {
        int[][] graph = { // 图的邻接矩阵
                {0, 2, 4, INF, INF, INF},
                {2, 0, 6, 3, INF, INF},
                {4, 6, 0, 1, 5, INF},
                {INF, 3, 1, 0, 7, 8},
                {INF, INF, 5, 7, 0, 9},
                {INF, INF, INF, 8, 9, 0}
        };
        int n = graph.length; // 图的顶点数
        int[] parent = new int[n]; // 存储每个顶点在最小生成树中的父节点
        int[] dist = new int[n]; // 存储每个顶点到最小生成树的距离
        boolean[] visited = new boolean[n]; // 标记每个顶点是否已加入最小生成树

        // 初始化dist数组和visited数组
        Arrays.fill(dist, INF);
        Arrays.fill(visited, false);

        // 从顶点0开始构建最小生成树
        dist[0] = 0;
        parent[0] = -1; // 根节点没有父节点

        // 重复n次,每次加入一个顶点
        for (int i = 0; i < n; i++) {
            // 选取距离最小的未加入最小生成树的顶点
            int u = minDistance(dist, visited);
            visited[u] = true;

            // 更新与u相邻的顶点的距离和父节点
            for (int v = 0; v < n; v++) {
                if (graph[u][v] != 0 && !visited[v] && graph[u][v] < dist[v]) {
                    parent[v] = u;
                    dist[v] = graph[u][v];
                }
            }
        }

        // 输出最小生成树的边
        System.out.println("最小生成树的边:");
        for (int i = 1; i < n; i++) {
            System.out.println(parent[i] + " - " + i + "\t" + graph[parent[i]][i]);
        }
    }

    // 返回距离最小的未加入最小生成树的顶点
    private static int minDistance(int[] dist, boolean[] visited) {
        int minDist = INF;
        int minIndex = -1;
        for (int i = 0; i < dist.length; i++) {
            if (!visited[i] && dist[i] < minDist) {
                minDist = dist[i];
                minIndex = i;
            }
        }
        return minIndex;
    }
}

运行结果:

最小生成树的边:
0 - 1    2
1 - 3    3
3 - 2    1
2 - 4    5
3 - 5    8
``
java实现:设G=VE是连通带权图如下图所示。使用Prim算法建立G的最小生成树。

原文地址: https://www.cveoy.top/t/topic/ffEt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录