• JAVA:实现Prim求最小生成树MST算法(附完整源码)


    JAVA:实现Prim求最小生成树MST算法

    package com.thealgorithms.datastructures.graphs;
    
    /**
     * A Java program for Prim's Minimum Spanning Tree (MST) algorithm. adjacency
     * matrix representation of the graph
     */
    class PrimMST {
        // Number of vertices in the graph
    
        private static final int V = 5;
    
        // A utility function to find the vertex with minimum key
        // value, from the set of vertices not yet included in MST
        int minKey(int key[], Boolean mstSet[]) {
            // Initialize min value
            int min = Integer.MAX_VALUE, min_index = -1;
    
            for (int v = 0; v < V; v++) {
                if (mstSet[v] == false && key[v] < min) {
                    min = key[v];
                    min_index = v;
                }
            }
    
            return min_index;
        }
    
        // A utility function to print the constructed MST stored in
        // parent[]
        void printMST(int parent[], int n, int graph[][]) {
            System.out.println("Edge   Weight");
            for (int i = 1; i < V; i++) {
                System.out.println(parent[i] + " - " + i + "    " + graph[i][parent[i]]);
            }
        }
    
        // Function to construct and print MST for a graph represented
        //  using adjacency matrix representation
        void primMST(int graph[][]) {
            // Array to store constructed MST
            int parent[] = new int[V];
    
            // Key values used to pick minimum weight edge in cut
            int key[] = new int[V];
    
            // To represent set of vertices not yet included in MST
            Boolean mstSet[] = new Boolean[V];
    
            // Initialize all keys as INFINITE
            for (int i = 0; i < V; i++) {
                key[i] = Integer.MAX_VALUE;
                mstSet[i] = false;
            }
    
            // Always include first 1st vertex in MST.
            key[0] = 0; // Make key 0 so that this vertex is
            // picked as first vertex
            parent[0] = -1; // First node is always root of MST
    
            // The MST will have V vertices
            for (int count = 0; count < V - 1; count++) {
                // Pick thd minimum key vertex from the set of vertices
                // not yet included in MST
                int u = minKey(key, mstSet);
    
                // Add the picked vertex to the MST Set
                mstSet[u] = true;
    
                // Update key value and parent index of the adjacent
                // vertices of the picked vertex. Consider only those
                // vertices which are not yet included in MST
                for (int v = 0; v < V; v++) // graph[u][v] is non zero only for adjacent vertices of m
                // mstSet[v] is false for vertices not yet included in MST
                // Update the key only if graph[u][v] is smaller than key[v]
                {
                    if (graph[u][v] != 0 && mstSet[v] == false && graph[u][v] < key[v]) {
                        parent[v] = u;
                        key[v] = graph[u][v];
                    }
                }
            }
    
            // print the constructed MST
            printMST(parent, V, graph);
        }
    
        public static void main(String[] args) {
            /* Let us create the following graph
           2    3
        (0)--(1)--(2)
        |    / \   |
        6| 8/   \5 |7
        | /      \ |
        (3)-------(4)
             9          */
            PrimMST t = 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},};
    
            // Print the solution
            t.primMST(graph);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
  • 相关阅读:
    Intel 芯片 Mac 如何重新安装系统
    udp/tcp错误总结
    strapi系列-常用操作记录(创建中间件,创建关系型数据库,数据去掉attributes那一层)
    算法&&&
    蓝桥杯1039
    SpringBoot-28-springSecurity注销和权限控制
    【笔记】ssh link-local 地址登录
    SpringBoot集成Swagger
    Mysql数据库的备份和恢复及日志管理
    单链表反转(acm模式)删除重复元素
  • 原文地址:https://blog.csdn.net/it_xiangqiang/article/details/126259682