Example #1
0
        public uint union(uint i, uint j)
        {
            i = get(i);
            j = get(j);
            Noode ni = items[i], nj = items[j];

            if (i == j)
            {
                return(i);
            }
            else if (ni.rank == nj.rank)
            {
                ni.rank++;
                nj.parent = ni;
                return(i);
            }
            else if (ni.rank < nj.rank)
            {
                ni.parent = nj;;
                return(j);
            }
            else
            {
                nj.parent = ni;
                return(i);
            }
        }
Example #2
0
        public uint get(uint i)
        {
            if (!items.ContainsKey(i))
            {
                add(i);
            }
            Noode root = items[i];

            while (root.parent != null)
            {
                root = root.parent;
            }
            Noode x = items[i];
            Noode j;

            while (x.parent != null)
            {
                j        = x.parent;
                x.parent = root;
                x        = j;
            }
            return(root.number);
        }
Example #3
0
 public Noode(Noode parent, uint rank, uint number)
 {
     this.parent = parent;
     this.rank   = rank;
     this.number = number;
 }