Icono
|Estudiar
TemarioEstructuras de datos y algoritmos básicosTema 5

Tema 5

Búsqueda en amplitud (BFS) y profundidad (DFS)

Patrón de examen

BFS para distancia mínima. DFS para exploración completa. En grids, ambos sirven para flood fill (contar regiones conectadas).

Explicación

BFS — Búsqueda en amplitud

Explora nivel por nivel usando una cola. Garantiza encontrar el camino más corto en grafos no ponderados.

Esquema:

cola.push(inicio)
mientras cola no esté vacía:
    u = cola.front(); cola.pop()
    para cada vecino v de u:
        si v no visitado:
            visitado[v] = true
            dist[v] = dist[u] + 1
            cola.push(v)

Usos: camino más corto en grids/grafos sin pesos, componentes conexas, flood fill.

DFS — Búsqueda en profundidad

Explora tan profundo como sea posible usando una pila (o recursión).

Esquema recursivo:

dfs(u):
    visitado[u] = true
    para cada vecino v de u:
        si v no visitado:
            dfs(v)

Usos: detectar ciclos, componentes conexas, ordenamiento topológico, backtracking.

Representación de grafos

// Lista de adyacencia (preferir)
vector<int> adj[MAXN];
adj[u].push_back(v);
adj[v].push_back(u); // si no dirigido

// Matriz de adyacencia (solo si n ≤ 1000)
bool adj[1001][1001];