Algs4-1.5.1使用quick-find算法处理序列
1.5.1使用quick-find算法處理序列9-0 3-4 5-8 7-2 2-1 5-7 0-3 4-2。對于輸入的每一對整數,給出id[]數組的內容和訪問數組的次數。
答:
public class UF
{
??? private int[] id;
??? private int count;
??? public UF(int N)
??? {
??????? count=N;
??????? id=new int[N];
??????? for (int i=0;i<N;i++)
??????? {
??????????? id[i]=i;
????????? StdOut.printf("%3d",i);
??????? }
??????? StdOut.println();
??? }
???
???? public int count()
???? {return count;}
????
????? boolean connected(int p,int q)
????? {return find(p)==find(q);}
????? //quick-find
?????? 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--;
????????? for (int i=0;i<id.length;i++)
????????????? StdOut.printf("%3d",id[i]);
????????? StdOut.println();
?????? }
?????
??? /*
????? 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();
?????????? UF uf=new UF(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
文件:tinyUF.txt
10
9
0
3
4
5
8
7
2
2
1
5
7
0
3
4
2
轉載于:https://www.cnblogs.com/longjin2018/p/9854648.html
總結
以上是生活随笔為你收集整理的Algs4-1.5.1使用quick-find算法处理序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现成
- 下一篇: 移动端下弹框禁止背景滑动