Algs4-1.5.7实现QuickFindUF类和QuickUnionUF类

1.5.7分别为quick-find算法和quick-union算法实现QuickFindUF类和QuickUnionUF类。

public class QuickFindUF

{

    private int[] id;

    private int count;

    public QuickFindUF(int N)

    {

        count=N;

        id=new int[N];

        for (int i=0;i<N;i++)

             id[i]=i;

    }

   

    public int count()

    {return count;}

    

     boolean connected(int p,int q)

     {return find(p)==find(q);}

 

     public int find(int p)

     {return id[p];}

      

      public  void union(int p,int q)

       {

          int pID=find(p);

          int qID=find(q);

          if (pID==qID) return;

          for (int i=0;i<id.length;i++)

              if(id[i]==pID) id[i]=qID;

          count--;

       }

 

    

       public static void main(String[] qrgs)

       {

           int N=StdIn.readInt();

           QuickFindUF uf=new QuickFindUF(N);

           while (!StdIn.isEmpty())

           {

               int p=StdIn.readInt();

               int q=StdIn.readInt();

               if(uf.connected(p,q)) continue;

               StdOut.println(p+ " " +q);

               uf.union(p,q);

            }//end while

        }//end main

}//end class

 

public class QuickUnionUF

{

    private int[] id;

    private int count;

    public QuickUnionUF(int N)

    {

        count=N;

        id=new int[N];

        for (int i=0;i<N;i++)

            id[i]=i;

   }

   

   public int count()

   {return count;}

    

   boolean connected(int p,int q)

   {return find(p)==find(q);}

 

 

    public int find(int p)

     {

          while(p!=id[p]) p=id[p];

          return p;

      }

     

      public void union(int p,int q)

      {

          int pRoot=find(p);

          int qRoot=find(q);

          if(pRoot==qRoot) return;

          id[pRoot]=qRoot;

          count--;

      }

 

       public static void main(String[] qrgs)

       {

           int N=StdIn.readInt();

           QuickUnionUF uf=new QuickUnionUF(N);

           while (!StdIn.isEmpty())

           {

               int p=StdIn.readInt();

               int q=StdIn.readInt();

               if(uf.connected(p,q)) continue;

               StdOut.println(p+ " " +q);

               uf.union(p,q);

              

            }//end while

        }//end main

}//end class

原文地址:https://www.cnblogs.com/longjin2018/p/9854703.html