Clone Graph – Solution & Complexity

1. Recognize the Pattern

The key pattern is: DFS copies each vertex and adjacency row once. Identify the state and invariant before coding.

2. Build the Algorithm

Advance one state transition at a time. Mark or update state before exploring dependent work.

3. Check Edge Cases

Test empty or minimal input, skewed shapes, duplicates where allowed, and impossible outcomes.

4. Solution and Complexity

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

def clone_graph(adjacency: list[list[int]]) -> list[list[int]]:
    clone = [[] for _ in adjacency]
    seen = set()
    def visit(node):
        if node in seen: return
        seen.add(node)
        clone[node] = adjacency[node].copy()
        for neighbor in adjacency[node]:
            visit(neighbor - 1)
    if adjacency: visit(0)
    return clone

FAQ