323. Number of Connected Components in an Undirected Graph

Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.

Example 1:

Input: n = 5 and edges = [[0, 1], [1, 2], [3, 4]]

     0          3
     |          |
     1 --- 2    4 

Output: 2

Example 2:

Input: n = 5 and edges = [[0, 1], [1, 2], [2, 3], [3, 4]]

     0           4
     |           |
     1 --- 2 --- 3

Output:  1

Note: You can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.

解题要点:

使用并查集,返回给出的n减去连好的个数。

class Solution(object):
    def countComponents(self, n, edges):
        """
        :type n: int
        :type edges: List[List[int]]
        :rtype: int
        """
        if edges == None or len(edges) == 0:
            return n
        def find(res, p):
            while p != res[p]:
                p = res[p]
                # res[p] = res[res[p]]
            return p
        
        def connected(res, p, q):
            return find(res, p) == find(res, q)
        
        def union(res, p, q):
            pid = find(res, p)
            qid = find(res, q)
            res[pid] = qid
        res = [0] * n
        for i in range(len(res)):
            res[i] = i
        for edge in edges:
            if not connected(res, edge[0], edge[1]):
                union(res, edge[0], edge[1])
                n -= 1
        return n

Last updated

Was this helpful?