首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用Java实现Prim的MST

Prim's算法是一种用于解决最小生成树(Minimum Spanning Tree,MST)问题的贪心算法。它通过逐步选择边来构建最小生成树,从一个初始顶点开始,每次选择与当前生成树相连的最小权重边所连接的顶点,并将该边加入生成树中,直到生成树包含了所有顶点。

Java是一种广泛使用的编程语言,具有丰富的库和框架支持,适合用于实现Prim的MST算法。以下是用Java实现Prim的MST算法的示例代码:

代码语言:txt
复制
import java.util.*;

public class PrimMST {
    private static final int V = 5; // 图的顶点数

    // 找到与当前生成树相连的最小权重边所连接的顶点
    private int minKey(int[] key, boolean[] mstSet) {
        int min = Integer.MAX_VALUE;
        int minIndex = -1;

        for (int v = 0; v < V; v++) {
            if (!mstSet[v] && key[v] < min) {
                min = key[v];
                minIndex = v;
            }
        }

        return minIndex;
    }

    // 打印最小生成树
    private void printMST(int[] parent, int[][] graph) {
        System.out.println("边\t权重");
        for (int i = 1; i < V; i++) {
            System.out.println(parent[i] + " - " + i + "\t" + graph[i][parent[i]]);
        }
    }

    // 使用Prim的算法构建最小生成树
    public void primMST(int[][] graph) {
        int[] parent = new int[V]; // 存储最小生成树的父节点
        int[] key = new int[V]; // 存储顶点的权重
        boolean[] mstSet = new boolean[V]; // 记录顶点是否已经加入最小生成树

        // 初始化key数组为无穷大,mstSet数组为false
        for (int i = 0; i < V; i++) {
            key[i] = Integer.MAX_VALUE;
            mstSet[i] = false;
        }

        key[0] = 0; // 将第一个顶点作为起始顶点
        parent[0] = -1; // 第一个顶点没有父节点

        for (int count = 0; count < V - 1; count++) {
            int u = minKey(key, mstSet); // 找到与当前生成树相连的最小权重边所连接的顶点
            mstSet[u] = true; // 将该顶点加入最小生成树

            // 更新与u相邻的顶点的权重
            for (int v = 0; v < V; v++) {
                if (graph[u][v] != 0 && !mstSet[v] && graph[u][v] < key[v]) {
                    parent[v] = u;
                    key[v] = graph[u][v];
                }
            }
        }

        printMST(parent, graph); // 打印最小生成树
    }

    public static void main(String[] args) {
        PrimMST mst = new PrimMST();
        int[][] graph = new int[][] {
            { 0, 2, 0, 6, 0 },
            { 2, 0, 3, 8, 5 },
            { 0, 3, 0, 0, 7 },
            { 6, 8, 0, 0, 9 },
            { 0, 5, 7, 9, 0 }
        };
        mst.primMST(graph);
    }
}

这段代码实现了Prim的MST算法,通过传入一个邻接矩阵表示的图,计算并打印出最小生成树的边及其权重。

在腾讯云的产品中,与云计算和Java开发相关的产品有云服务器(CVM)、云数据库MySQL版、云存储(COS)等。您可以通过访问腾讯云官网了解更多关于这些产品的详细信息和使用方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共17个视频
动力节点-JDK动态代理(AOP)使用及实现原理分析
动力节点Java培训
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理。 动态代理可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。
共50个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-1
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
共50个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-2
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
共50个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-3
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
共18个视频
动力节点-【CRM客户管理系统】SSM框架项目实战教程-4
动力节点Java培训
这套教程是动力节点最新录制的CRM项目,课程主要针对核心的客户关系管理业务功能进行实现,让你能够深层掌握主流SSM框架、Linux操作系统下部署项目、数据库设计原则和技巧、数据如何通过图表在页面展示、Java对excel文件的处理,学会使用项目管理工具Maven、版本控制工具Git,以及缓存在项目中的运用熟悉前端开发技术及常见的特效等。 通过课程可以了解项目开发流程及项目开发各阶段主要文档及产出物
领券