zoukankan      html  css  js  c++  java
  • 不相交集

     1 public class DisjoinSet 
     2 {
     3 
     4     public static void main(String[] args)
     5     {
     6         DisjoinSet disjoin = new DisjoinSet(8);
     7 
     8         disjoin.union(4, 3);
     9         disjoin.union(5, 4);
    10         disjoin.union(6, 5);
    11         disjoin.union(7, 6);
    12         disjoin.union(8, 7);
    13         
    14         int c = disjoin.find(3);
    15         disjoin.display();
    16     }
    17     
    18     
    19     private int n;
    20     
    21     private int[] parents;
    22     
    23     private int[] rank;
    24     
    25     
    26     public DisjoinSet(int n)
    27     {
    28         this.n = n;
    29         init();
    30     }
    31 
    32     private void init()
    33     {
    34         parents = new int[n + 1];
    35         rank = new int[n + 1];
    36         
    37         for (int i = 1; i <= n; i++) {
    38             parents[i] = i;
    39             rank[i] = i;
    40         }
    41     }
    42     
    43     public int find(int x)
    44     {
    45         int parent = x;
    46         while (parent != parents[parent]) {
    47             parent = parents[parent];
    48         }
    49         
    50         disjoin(x, parent);
    51         return parent;
    52     }
    53     
    54     private void disjoin(int x, int parent)
    55     {
    56         int temp;
    57         while (x != parent) {
    58             temp = parents[x];
    59             parents[x] = parent;
    60             x = temp;
    61         }
    62     }
    63     
    64     public void union(int a, int b)
    65     {
    66         int compare = compare(rank[a], rank[b]); 
    67         if (compare == 1) {
    68             parents[b] = a;
    69         }
    70         else {
    71             parents[a] = b;
    72         }
    73     }
    74     
    75     private int compare(int a, int b)
    76     {
    77         return a > b ? 1 : a < b ? -1 : 0;
    78     }
    79     
    80     public void display()
    81     {
    82         for (int i : rank) {
    83             System.out.print(" " + i + " ");
    84         }
    85         
    86         System.out.println();
    87         
    88         for (int i : parents) {
    89             System.out.print(" " + i + " ");
    90         }
    91     }
    92 }
  • 相关阅读:
    绑定下拉列表
    部署WSP出现错误—已在此服务器场中安装ID为XXXXX的功能
    sharepoint权限
    sql日期操作
    Sql脚本动态创建表
    sharepoint中添加子网站
    解决未知的服务器标记“asp:ListView”。
    sharepoint中新添加页面
    vue中使用localStorage存储信息
    Js事件大全
  • 原文地址:https://www.cnblogs.com/rilley/p/2584800.html
Copyright © 2011-2022 走看看