首页 > 编程语言 >Prim算法是一种用于解决最小生成树问题的贪心算法。它通过逐步选择边来构建最小生成树,直到包含了所有的顶点。以下是Prim算法的Java代码示例:

Prim算法是一种用于解决最小生成树问题的贪心算法。它通过逐步选择边来构建最小生成树,直到包含了所有的顶点。以下是Prim算法的Java代码示例:

时间:2023-08-20 19:23:29浏览次数:50  
标签:Prim parent int graph 最小 minKey 算法 key mstSet

import java.util.*;
 class PrimAlgorithm {
    private static final int INF = Integer.MAX_VALUE;
     public void primMST(int[][] graph) {
        int vertices = graph.length;
        int[] parent = new int[vertices]; // 用于存储最小生成树的父节点
        int[] key = new int[vertices]; // 用于存储顶点的权值
        boolean[] mstSet = new boolean[vertices]; // 用于标记顶点是否已经加入最小生成树
         // 初始化key数组为无穷大,mstSet数组为false
        Arrays.fill(key, INF);
        Arrays.fill(mstSet, false);
         // 将第一个顶点作为起始点
        key[0] = 0;
        parent[0] = -1;
         for (int i = 0; i < vertices - 1; i++) {
            int minKey = minKeyIndex(key, mstSet);
            mstSet[minKey] = true;
             // 更新与选中顶点相邻的顶点的权值和父节点
            for (int j = 0; j < vertices; j++) {
                if (graph[minKey][j] != 0 && !mstSet[j] && graph[minKey][j] < key[j]) {
                    parent[j] = minKey;
                    key[j] = graph[minKey][j];
                }
            }
        }
         printMST(parent, graph);
    }
     private int minKeyIndex(int[] key, boolean[] mstSet) {
        int min = INF;
        int minIndex = -1;
         for (int i = 0; i < key.length; i++) {
            if (!mstSet[i] && key[i] < min) {
                min = key[i];
                minIndex = i;
            }
        }
         return minIndex;
    }
     private void printMST(int[] parent, int[][] graph) {
        System.out.println("Edge \tWeight");
        for (int i = 1; i < graph.length; i++) {
            System.out.println(parent[i] + " - " + i + "\t" + graph[i][parent[i]]);
        }
    }
     public static void main(String[] args) {
        int[][] graph = {
            {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}
        };
         PrimAlgorithm prim = new PrimAlgorithm();
        prim.primMST(graph);
    }
}

标签:Prim,parent,int,graph,最小,minKey,算法,key,mstSet
From: https://www.cnblogs.com/ukzq/p/17644424.html

相关文章

  • Kruskal算法是一种用于寻找图的最小生成树的贪心算法。它通过按照边的权重递增的顺序
    Kruskal算法可以通过生活中的例子来解释。我们可以将城市之间的道路网络看作是一个图,每个城市是一个顶点,道路是连接城市的边,而道路的长度可以看作是边的权重。假设我们想要修建一条连接所有城市的最小成本道路网络。首先,我们需要找到连接城市的所有道路,并按照道路的长度进行排......
  • 只需5分钟,了解常见的四种限流算法
    一、计数器算法在指定周期内累加访问次数,当访问次数达到设定的阈值时,触发限流策略,当进入下一个时间周期时进行访问次数的清零。如图所示,我们要求3秒内的请求不要超过150次:但是,貌似看似很“完美”的流量统计方式其实存在一个非常严重的临界问题,即:如果第2到3秒内产生了150次请求,而......
  • 扩展欧几里得算法
    裴蜀定理对于任意正整数\(a,b\),记\(g=(a,b)\),一定存在整数\(x,y\),使得\(ax+by=g\),且能凑出的数一定是\(g\)的倍数。首先由于\(a,b\)都是\(g\)的倍数,所以能凑出的数必定是\(g\)的倍数。关键在于怎么证明一定存在整数\(x,y\),使得\(ax+by=g\)。下面我们就抛出这个......
  • STL容器和算法
    目录STL容器和算法基本概念容器容器的分类序列式容器关联式容器vector容器vector的定义vector的赋值vector的大小vector的访问方式vector的元素操作deque容器list容器基本概念迭代器基本概念vector的迭代器迭代器失效算法STL容器和算法基本概念标准模板库,主要分为容器、算法、......
  • 算法总结
    前言:有关于算法的一切的大合集基本数据结构及排序方法手撸完全二叉树/满二叉树红黑树节点分为红色或者黑色;根节点必为黑色;叶子节点都为黑色,且为null;连接红色节点的两个子节点都为黑色(红黑树不会出现相邻的红色节点);从任意节点出发,到其每个叶子节点的路径中包含相同数......
  • 快速幂算法
    快速幂洛谷P1226【模板】快速幂||取余运算#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;llquickpow(lla,llb,llp=10){ //计算a的b次方 if(b==0)return1; intans=1; while(b){ if(b&1){ ans=ans*a%p; } ......
  • 第二十三节 API(算法,lambda,练习)
    常见的七种查找算法:​ 数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构,再回头看算法。1.基本查找​ 也叫做顺序查找​说明:顺序......
  • UFCFT4-15-3 加密系统算法
    MODULARPROGRAMMECOURSEWORKASSESSMENTSPECIFICATIONModuleDetailsModuleCodeUFCFT4-15-3 Runsem3FIRSTSIT2023/24 ModuleTitleCryptographyModuleLeader ModuleTutorsSMLAUComponentandElementNumberProgram(includingsourcecodeandexecutable)and......
  • 基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护
    基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护传输数据-编码型&加密型等传输格式-常规&JSON&XML等密码存储-Web&系统&三方应用代码混淆-源代码加密&逆向保护加密:1.常见加密编码进制等算法解......
  • 探索编程世界的宝藏:程序员必掌握的20大算法
    #程序员必须掌握哪些算法?#1引言在当今数字化时代,程序员们仍然需要拥有一把解决问题和优化代码的金钥匙。这些钥匙是算法,它们隐藏在计算机科学的宝藏中,等待着我们去发现和掌握。本篇博文将带你踏上一段引人入胜的探险之旅,揭开程序员必须掌握的20大算法的神秘面纱。从冒泡排序到......