• 不相交集


     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 }
  • 相关阅读:
    WebFrom 复杂控件
    WebFrom 简单控件
    WinForm开发控件集合
    ListView 控件操作
    窗体类型
    WEBFORM--第一讲
    display:inline/block/inline-block
    WINFORM--第五讲(窗体类型)
    WINFORM--第四讲(布局)
    WINFORM--第三讲(下拉列表)
  • 原文地址:https://www.cnblogs.com/rilley/p/2584800.html
Copyright © 2020-2023  润新知