您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法

普利姆算法(图文)

第十三双眼睛2023-10-23【数据结构与算法】人已围观

简介普利姆算法

普利姆算法
package com.xingchen.day017;
import java.util.Arrays;
public class Prim {

    public static void main(String[] args) {
        char[] data = {'A','B','C','D','E','F','G'};
        int vertex = data.length;
        int[][] weight = {
                {1000,5,7,1000,1000,1000,2},
                {5,1000,1000,9,1000,1000,3},
                {7,1000,1000,1000,8,1000,1000},
                {1000,9,1000,1000,1000,4,1000},
                {1000,1000,8,1000,1000,5,4},
                {1000,1000,1000,4,5,1000,6},
                {2,3,1000,1000,4,6,1000},
        };
        MGraph mGraph = new MGraph(vertex);
        MinTree minTree = new MinTree();
        minTree.createGraph(mGraph, vertex,data,weight);
        minTree.show(mGraph);
        minTree.prim(mGraph,0);
    }
}
class MinTree {
    public void createGraph(MGraph mGraph, int vertex,char[] data,int[][] weight) {
        for (int i = 0; i<vertex ;i ++) {
            mGraph.data[i] = data[i];
            for (int j= 0 ;j<vertex; j++) {
                mGraph.weight[i][j] = weight[i][j];
            }
        }
    }
    public void show(MGraph mGraph) {
        for (int[] link : mGraph.weight) {
            System.out.println(Arrays.toString(link));
        }
    }
    public void prim(MGraph mGraph, int v) {
        //标记顶点是否被访问过
        int[] visited = new int[mGraph.vertex];
        //把当前节点标记为已访问
        visited[v] = 1;
        int h1 = -1;
        int h2 = -1;
        int minWeight = 1000;
        for (int k = 1; k<mGraph.vertex; k++) { //运行完毕后,会有vertex- 1条边
            for (int i = 0;i<mGraph.vertex; i ++) {
                for (int j = 0;j<mGraph.vertex; j ++) {
                    //寻找访问过的和未访问过的节点之间权值最小的边
                    if (visited[i] == 1 && visited[j] ==0 && mGraph.weight[i][j] < minWeight) {
                        minWeight = mGraph.weight[i][j];
                        h1 = i;
                        h2 = j;
                    }
                }
            }
            System.out.println("边" + mGraph.data[h1] + "" + mGraph.data[h2] +"权值:" + minWeight);
            visited[h2] = 1;
            minWeight = 1000;
        }
    }
}
class MGraph {
    public int vertex;
    char[] data;//表示节点数据
    int[][] weight;//存放边
    public MGraph(int vertex) {
        this.vertex = vertex;
        this.data = new char[vertex];
        weight = new int[vertex][vertex];
    }
}

Tags:

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计242篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们