Number of Connected Components

Count connected components using DFS traversal.

Medium

Examples

Example 1: n=5, edges=[[0,1],[1,2],[3,4]] → 2

Implementation

Ruby

  # ----------------------------------------
  # 1. Count Connected Components using DFS
  #
  # Input:
  #   n: number of nodes (ignored for letter-labeled graphs)
  #   edges: array of edges [u, v]
  # Output:
  #   Integer — number of connected components
  #
  # Time Complexity: O(N + E)
  # Space Complexity: O(N)
  # Example: count_components(nil, [['A', 'B'], ['A', 'C'], ['D', 'E']])
  # Output: 2 (components: {A, B, C}, {D, E})
  # ----------------------------------------
  def count_components(n_or_nil, edges)
    is_letters = edges.flatten.any? { |v| v.is_a?(String) }

    graph = Hash.new { |h, k| h[k] = [] }
    edges.each { |u, v| graph[u] << v; graph[v] << u }

    visited = {}
    count = 0

    dfs = lambda do |node|
      return if visited[node]
      puts "Visiting #{node}"
      visited[node] = true
      graph[node].each { |neighbor| dfs.call(neighbor) }
    end

    nodes = is_letters ? graph.keys : (0...n_or_nil).to_a

    nodes.each do |node|
      next if visited[node]
      puts "Starting DFS at #{node} (new component)"
      dfs.call(node)
      count += 1
    end

    puts "Total connected components: #{count}"
    count

Complexity Analysis

Time Complexity: O(V + E)
Space Complexity: O(V)

Patterns & Techniques

Problem Details

Category: Graphs And Traversal
Difficulty: Medium
Module: GraphsAndTraversal
Method: count_components
← Back to Graphs And Traversal