zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第3次实践作业
    第2次实践作业
    第09组 团队Git现场编程实战
    第二次结对编程作业
    团队项目-需求分析报告
    团队项目-选题报告
    第一次结对编程作业
    第一次个人编程作业
    第一次博客作业
    课程设计第十四天
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854703.html
Copyright © 2011-2022 走看看