• java数据结构和算法------图(最小生成树Prim)


     1 package iYou.neugle.graph;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 //创建图过程的代码在图的那篇博文中,此处直接使用
     7 public class Prim {
     8     private MyGraph1 graph;
     9     private List<Integer> v = new ArrayList<Integer>();// 待处理集合
    10     private List<Integer> u = new ArrayList<Integer>();// 已处理集合
    11 
    12     public Prim(MyGraph1 graph) {
    13         this.graph = graph;
    14     }
    15 
    16     private void Init() {
    17         for (int i = 0; i < this.graph.getGraph().maxNum; i++) {
    18             v.add(i);
    19         }
    20     }
    21 
    22     // Prim核心方法
    23     public void PrimCore() {
    24         this.Init();
    25         u.add(v.get(0));
    26         v.remove(0);
    27         System.out.println("最小生成树为--------");
    28         int weight = 0;
    29         while (u.size() < this.graph.getGraph().maxNum) {
    30             int minw = Integer.MAX_VALUE;
    31             int v1 = 0, v2 = 0, r = 0;
    32             for (int i = 0; i < this.u.size(); i++) {
    33                 int a = this.u.get(i);
    34                 for (int j = 0; j < this.v.size(); j++) {
    35                     int b = this.v.get(j);
    36                     int currentw = this.graph.getGraph().edge[a][b];
    37                     if (currentw > 0 && currentw < minw) {
    38                         minw = currentw;// 权值
    39                         v1 = a;// 第一条边
    40                         v2 = b;// 第二条边
    41                         r = j;// 在v中待删除元素
    42                     }
    43                 }
    44             }
    45             System.out.println((v1 + 1) + "->" + (v2 + 1));
    46             weight += minw;
    47             this.u.add(v2);
    48             this.v.remove(r);
    49         }
    50         System.out.println("----------------");
    51         System.out.println("最小生成树的权值为: " + weight);
    52     }
    53 
    54     //主函数
    55     public static void main(String[] args) {
    56         MyGraph1 graph = new MyGraph1(5, 0);
    57         graph.CreateMaxtrixGraph(1, 2, 2);
    58         graph.CreateMaxtrixGraph(1, 3, 5);
    59         graph.CreateMaxtrixGraph(1, 5, 3);
    60         graph.CreateMaxtrixGraph(2, 4, 4);
    61         graph.CreateMaxtrixGraph(3, 5, 5);
    62         graph.CreateMaxtrixGraph(4, 5, 2);
    63         graph.OutPutMaxtrixGraph();
    64         Prim prim = new Prim(graph);
    65         prim.PrimCore();
    66     }
    67 }
      1 2 3 4 5 
    1 0 2 5 0 3 
    2 2 0 0 4 0 
    3 5 0 0 0 5 
    4 0 4 0 0 2 
    5 3 0 5 2 0 
    最小生成树为--------
    1->2
    1->5
    5->4
    1->3
    ----------------
    最小生成树的权值为: 12
  • 相关阅读:
    把Asp.net Core程序代码部署到Ubuntu(不含数据库)
    2019周笔记(3.11-3.16)
    利用StackExchange.Redis和Log4Net构建日志队列
    Windows环境下安装配置Mosquitto服务及入门操作介绍
    2019周笔记(2.25-3.01)(压缩数据库)
    2019周笔记(2.18-2.23)
    WinForm客户端限速下载(C#限速下载)
    2019周笔记(2.14-2.17)(聚集索引、非聚集索引)
    高并发场景下秒杀项目静态锁的使用疑问
    线性结构队列以及应用(上)
  • 原文地址:https://www.cnblogs.com/niuxiaoha/p/4669437.html
Copyright © 2020-2023  润新知