美文网首页
普里姆算法(Prim)-最小生成树

普里姆算法(Prim)-最小生成树

作者: RalapHao | 来源:发表于2019-06-19 16:35 被阅读0次
  1. 首先转为图,从一个顶点出发,找到相邻的最短路径的顶点,然后再找前俩个节点的所有路径中最短路径的顶点,依次类推
public class PrimAlgorithm {

    public static void main(String[] args) {
        char[] data = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
        int verxs = data.length;
        int[][] weight = {
                {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}
        };
        MinTree mt = new MinTree();
        MGraph graph = mt.createGraph(verxs, data, weight);
        mt.show(graph);
        mt.prim(graph, 0);
    }


}

class MinTree {

    public MGraph createGraph(int verxs, char[] data, int[][] weight) {
        MGraph graph = new MGraph(verxs, data, weight);
        return graph;
    }

    public void show(MGraph graph) {
        for (int i = 0; i < graph.weight.length; i++) {
            System.out.println(Arrays.toString(graph.weight[i]));
        }
    }


    public void prim(MGraph graph, int v) {
        int[] visited = new int[graph.verxs];
        visited[v] = 1;
        int minWeight = 1000;

        int minX = 0, minY = 0;
        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];
                        minX = j;
                        minY = k;
                    }
                }
            }
            System.out.println("点:" + graph.data[minX] + "====点:" + graph.data[minY] + "---weight:"
                    + graph.weight[minX][minY]);
            visited[minY] = 1;
            minWeight = 10000;
        }
    }
}


class MGraph {

    int verxs;
    char[] data;
    int[][] weight;

    public MGraph(int verxs, char[] data, int[][] weight) {
        this.verxs = verxs;
        this.data = data;
        this.weight = weight;
    }
}

相关文章

  • 大数据算法系列13:最小生成树算法

    一. Kruskal算法 二. Prim算法 普里姆(Prim)算法,也是求加权连通图的最小生成树的算法。 基本思...

  • 算法之「普里姆(Prim)算法」

    普里姆算法 普里姆算法(Prim's algorithm)是图中的一种算法,可在加权连通图中搜索最小生成树。 该算...

  • 2019年王道数据结构学习笔记----图

    最小生成树算法 普里姆算法prim 普里姆算法是不断选点,而选点的依据,在当前点集合向外发出的边的最小值,另外每次...

  • 最小生成树

    二. 最小生成树 Prim 普里姆算法 思路: 该算法采用贪心思想,在图中任意选择一结点构建一颗生成树然后从所有与...

  • 算法学习(3)-最小生成树算法

    最小生成树Prim算法理解最小生成树-Prim算法和Kruskal算法Prim算法和Kruskal算法

  • 普里姆算法(Prim)-最小生成树

    首先转为图,从一个顶点出发,找到相邻的最短路径的顶点,然后再找前俩个节点的所有路径中最短路径的顶点,依次类推

  • 7.9图的应用:最小生成树

    最小生成树:Prim算法 ❖解决最小生成树问题的Prim算法,属于“贪心算法”,即每步都沿着最小权重的边向前搜索。...

  • 今日份打卡 181/365

    技术文章最小生成树算法复习prim算法

  • 无标题文章

    算法动态展示 1. 已完成的算法 --Kruskal最小生成树算法 --Prim最小生成树算法,包括lazy-ve...

  • 最小生成树

    1.普利姆(Prim)算法 以某顶点为起点,逐步找各顶点上最小权值的边来构成最小生成树。1.初始化选择一个顶点作为...

网友评论

      本文标题:普里姆算法(Prim)-最小生成树

      本文链接:https://www.haomeiwen.com/subject/psikqctx.html