美文网首页
Union Find

Union Find

作者: 王鑫鑫_d516 | 来源:发表于2017-11-02 04:58 被阅读0次
class Main {
    static class UnionFind {
        private int [] father;
        UnionFind(int n) {
            father = new int[n];
            // init with their index
            for (int i = 0; i < n; ++ i) {
                father[i] = i;
            }
        }
        
        //a: employer
        //b: employee
        public void union(int a, int b) {
            int fa = find(a);
            int fb = find(b);
            if (fa != fb) father[fb] = father[fa];
        }
        
        public int find(int a) {
            if (a == father[a]) return a;
            return father[a] = find(father[a]);
        }
    }
    
    public static void main(String[] args) {
        // 1. Simulator of input
        int [][] input = new int[][]{
            {'A', 'B'},
            {'B', 'C'},
            {'C', 'D'}
        };
        int m = input.length;
        int n = input[0].length;
        System.out.println(m + "\n"+ n);
        for (int i = 0; i < m; ++ i) {
            for (int j = 0; j < n; ++ j) {
                System.out.println((char)(input[i][j]));
            }
        }
        
        // 2. Def union find
        int ASCII_SIZE = 256;
            // 0 1 2 ... 65(A) 66(B) ... 255
            // 0 1 3 ... 65(A) 66(B) ... 255
        UnionFind uf = new UnionFind(ASCII_SIZE);
        
        // 3. Union
        for (int i = 0; i < m; ++ i) {
            uf.union(input[i][0], input[i][1]);
        }
        
        // 4. Ouptut 
            // the input[0][0] can be any one which is valid
        System.out.println(uf.find(input[2][1]));
    }
}

相关文章

网友评论

      本文标题:Union Find

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