zoukankan      html  css  js  c++  java
  • Leetcode: 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:
         0          3
         |          |
         1 --- 2    4
    Given n = 5 and edges = [[0, 1], [1, 2], [3, 4]], return 2.
    
    Example 2:
         0           4
         |           |
         1 --- 2 --- 3
    Given n = 5 and edges = [[0, 1], [1, 2], [2, 3], [3, 4]], return 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.

    Use Union Find to figure out the number of connected components

     1 public class Solution {
     2     public int countComponents(int n, int[][] edges) {
     3         unionFind uf = new unionFind(n);
     4         for (int[] edge : edges) {
     5             if (!uf.isConnected(edge[0], edge[1])) {
     6                 uf.union(edge[0], edge[1]);
     7             }
     8         }
     9         return uf.findCount();
    10     }
    11     
    12     public class unionFind{
    13             int[] ids;
    14             int count;
    15             
    16             public unionFind(int num) {
    17                 this.ids = new int[num];
    18                 for (int i=0; i<num; i++) {
    19                     ids[i] = i;
    20                 }
    21                 this.count = num;
    22             }
    23             
    24             public int find(int i) {
    25                 return ids[i];
    26             }
    27             
    28             public void union(int i1, int i2) {
    29                 int id1 = find(i1);
    30                 int id2 = find(i2);
    31                 if (id1 != id2) {
    32                     for (int i=0; i<ids.length; i++) {
    33                         if (ids[i] == id2) {
    34                             ids[i] = id1;
    35                         }
    36                     }
    37                     count--;
    38                 }
    39             }
    40             
    41             public boolean isConnected(int i1, int i2) {
    42                 return find(i1)==find(i2);
    43             }
    44             
    45             public int findCount() {
    46                 return count;
    47             }
    48         }
    49 }
  • 相关阅读:
    165. Compare Version Numbers
    163. Missing Ranges
    162. Find Peak Element
    161. One Edit Distance
    156. Binary Tree Upside Down
    工欲善其事-Eclipse设置
    2016年1月15日面试某互联网公司总结(一)
    以前用SQL实现的机构职能树,再看看
    Sublime3学习笔记
    Android之EACCES (Permission denied)与Permission denied异常探密
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5088502.html
Copyright © 2011-2022 走看看