← Back

Depth-First Search (DFS)

Explore a graph by diving as deep as possible before backtracking.

1 / 1
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {

}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
    visited := make([]bool, len(graph))
    order := []int{}
}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
    visited := make([]bool, len(graph))
    order := []int{}

    // Recursive helper closes over visited/order.

}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
    visited := make([]bool, len(graph))
    order := []int{}

    // Recursive helper closes over visited/order.
    var visit func(node int)
    visit = func(node int) {

    }
}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
    visited := make([]bool, len(graph))
    order := []int{}

    // Recursive helper closes over visited/order.
    var visit func(node int)
    visit = func(node int) {
        visited[node] = true
        order = append(order, node)
    }
}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
    visited := make([]bool, len(graph))
    order := []int{}

    // Recursive helper closes over visited/order.
    var visit func(node int)
    visit = func(node int) {
        visited[node] = true
        order = append(order, node)

        // Recurse into each unvisited neighbor.
    }
}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
    visited := make([]bool, len(graph))
    order := []int{}

    // Recursive helper closes over visited/order.
    var visit func(node int)
    visit = func(node int) {
        visited[node] = true
        order = append(order, node)

        // Recurse into each unvisited neighbor.
        for _, next := range graph[node] {
            if !visited[next] {
                visit(next)
            }
        }
    }
}
// graph is an adjacency list: graph[node] = list of neighbors.
func dfs(graph [][]int, start int) []int {
    // Micropattern: track visited nodes, record visit order.
    visited := make([]bool, len(graph))
    order := []int{}

    // Recursive helper closes over visited/order.
    var visit func(node int)
    visit = func(node int) {
        visited[node] = true
        order = append(order, node)

        // Recurse into each unvisited neighbor.
        for _, next := range graph[node] {
            if !visited[next] {
                visit(next)
            }
        }
    }

    visit(start)
    return order // O(V + E)
}

Tap the left half to go back, the right half to go forward.

Arrow keys or space to navigate · Esc to exit.