/******************************************************************************
 *  Name:   Andy Guna 
 *  NetID:   guna@princeton.edu	
 *  Precept: P01
 *
 *  Partner Name:    N/A
 *  Partner NetID:   N/A
 *  Partner Precept: N/A
 * 
 *  Operating system: Windows
 *  Compiler: drjava
 *  Text editor / IDE: notepad++
 *
 *  Have you taken (part of) this course before: yes
 *  Have you taken (part of) the Coursera course Algorithm, Part I: no
 *
 *  Hours to complete assignment (optional):
 *
 * Description: This example demonstrates the use of WeightedUnionFindUF, StdRandom and Stopwatch
 * Classes. The code addresses the following problem. Given a set of N points, numbered
 * from 0 ... N-1, if any two points are randomly selected and merged, when will the
 * points 0 and N-1 be in the same set.
 *
*******************************************************************************/
import edu.princeton.cs.algs4.WeightedQuickUnionUF;
import edu.princeton.cs.algs4.Stopwatch;
import edu.princeton.cs.algs4.StdRandom;
  
public class UFExample1 {
    public static void main(String[] args) { 
        Stopwatch Clock = new Stopwatch();
        int N = Integer.parseInt(args[0]);
        int nexttolast = N-1;
        WeightedQuickUnionUF UF1 = new WeightedQuickUnionUF(N);
        while (true) {
           int i = StdRandom.uniform(N);
           int j = StdRandom.uniform(N);
           if (!UF1.connected(i,j)){
              UF1.union(i,j);
              System.out.println("connecting " + i + " and " + j);
           }
           if (UF1.connected(0,N-1)) {
             System.out.println("\n EXITING ... now  0 and " + nexttolast + " are connected ");
             break;
           }
        }  
        System.out.println("The elapsed time is " + Clock.elapsedTime());
       
    }
}