Givennnodes in a graph labeled from1ton. There is no edges in the graph at beginning.

You need to support the following method:
1.connect(a, b), add an edge to connect nodeaand node b. 2.query(a, b)`, check if two nodes are connected

5 // n = 5
query(1, 2) return false
connect(1, 2)
query(1, 3) return false
connect(2, 4)
query(1, 4) return true

union find

public class ConnectingGraph {
    /*
    * @param n: An integer
    int[] parent;
    */
    private int[] parent;
    public ConnectingGraph(int n) {
       parent = new int[n+1];
       for (int i = 1; i < n+1; i++) {
           parent[i] = -1;
       }
    }

    /*
     * @param a: An integer
     * @param b: An integer
     * @return: nothing
     */
    public int find(int x) {
        while (parent[x] !=  -1) {
            x = parent[x];
        }
        return x;
    }
    public void connect(int a, int b) {
        int x = find(a);
        int y = find(b);
        if (x != y) {
            parent[x] = y;
        }
    }

    /*
     * @param a: An integer
     * @param b: An integer
     * @return: A boolean
     */
    public boolean query(int a, int b) {
        // write your code here
        int x = find(a);
        int y = find(b);
        return x == y;

    }
}

results matching ""

    No results matching ""