Referencia Rápida

Chuleta de Algoritmos de Grafos: Complejidad, Usos y Cómo Elegir

Una página para revisar antes de una entrevista o mientras programas. Cada algoritmo de grafos importante, su complejidad en tiempo y espacio, para qué es mejor y una guía de decisión para elegir el correcto cuando el reloj corre.

11 Min de lectura Actualizado: Julio 2026 Todos los Niveles
Mohammed Islam Hadjoudj
Mohammed Islam Hadjoudj
Expert Operations Research Engineer
Recorrido BFS DFS Caminos Más Cortos Dijkstra Bellman-Ford Floyd-Warshall A* Árboles de expansión Kruskal Prim Ordenamiento Orden topológico Detección de ciclos Conectividad Union-Find Tarjan / Kosaraju (SCC) Flujo en Redes Ford-Fulkerson Edmonds-Karp
Las seis familias de algoritmos de grafos. Casi todo problema de grafos cae en una de ellas.

Esta chuleta está hecha para dos momentos: la última hora antes de una entrevista técnica y la mitad de una sesión de programación cuando conoces la forma del problema pero necesitas la herramienta exacta. Es deliberadamente compacta. Para la historia completa detrás de cada algoritmo, sigue los enlaces a los artículos en profundidad, y si quieres un camino estructurado por todo ello, empieza con la hoja de ruta de teoría de grafos.

A lo largo del texto, V es el número de vértices (nodos) y E es el número de aristas.

La Tabla Maestra de Complejidad

Lo más útil que se puede tener memorizado. Las complejidades suponen la implementación eficiente estándar (montículo binario para Dijkstra y Prim, compresión de caminos y unión por rango para union-find).

AlgoritmoMejor paraTiempoEspacio
BFSCamino más corto en grafos no ponderados, orden por nivelesO(V + E)O(V)
DFSConectividad, ciclos, explorar la estructuraO(V + E)O(V)
DijkstraCamino más corto, pesos no negativosO((V + E) log V)O(V)
Bellman-FordCamino más corto con pesos negativosO(V · E)O(V)
Floyd-WarshallCaminos más cortos entre todos los pares, grafos pequeños y densosO(V³)O(V²)
A*Camino más corto heurístico (mapas, videojuegos)O(E) típicoO(V)
KruskalÁrbol de expansión mínima, grafos dispersosO(E log E)O(V)
PrimÁrbol de expansión mínima, grafos densosO((V + E) log V)O(V)
Topological SortOrdenar un DAG por dependenciasO(V + E)O(V)
Union-FindConectividad dinámica, agrupamientoO(α(V)) por op.O(V)
Tarjan / KosarajuComponentes fuertemente conexasO(V + E)O(V)
Edmonds-KarpFlujo máximo, corte mínimoO(V · E²)O(V + E)
¿Necesitas el código real? Esta tabla lista 12 esenciales de un vistazo. El Manual de algoritmos tiene los 55, cada uno con el pseudocódigo y su complejidad desarrollada paso a paso.

Nota sobre A*: su tiempo de ejecución depende por completo de la heurística. Con una heurística perfecta va casi en línea recta a la meta; con una inútil se degrada a Dijkstra. La α en union-find es la función inversa de Ackermann, en la práctica una constante pequeña para cualquier entrada que verás jamás. Para el razonamiento detrás de cada fila, consulta la guía de complejidad de algoritmos de grafos.

Representaciones de Grafos

Antes de cualquier algoritmo, eliges cómo almacenar el grafo. Esta única decisión afecta a cada complejidad de arriba.

RepresentaciónEspacioConsulta de aristaMejor para
Lista de adyacenciaO(V + E)O(degree)Grafos dispersos, la opción por defecto
Matriz de adyacenciaO(V²)O(1)Grafos densos, consultas en tiempo constante

Regla general: recurre a la lista de adyacencia salvo que el grafo sea denso o necesites comprobaciones de aristas en tiempo constante. Una cuadrícula 2D es un grafo implícito donde cada celda es un nodo conectado a sus vecinas, así que a menudo no necesitas ninguna representación explícita.

Recorrido: BFS y DFS

Los dos algoritmos sobre los que se construye todo lo demás. Aprende la comparación completa en BFS vs DFS.

Caminos Más Cortos

La familia más común en entrevistas y en la práctica. La elección correcta la dictan los pesos de las aristas. La inmersión completa está en entender los algoritmos de caminos más cortos.

SituaciónUsaPor qué
Aristas no ponderadasBFSLa primera llegada es el camino más corto
Pesos no negativosDijkstraVoraz con un min-heap, siempre correcto aquí
Pesos negativosBellman-FordRelaja las aristas V-1 veces, detecta ciclos negativos
Todos los pares a la vezFloyd-WarshallTres bucles anidados, código diminuto, genial en grafos pequeños
Tienes una heurísticaA*Dijkstra guiado hacia la meta, ver A*
La trampa clásica: nunca ejecutes Dijkstra en un grafo con aristas negativas. Fija un nodo como definitivo demasiado pronto y puede devolver una respuesta incorrecta. Recurre a Bellman-Ford en su lugar.

Árboles de Expansión Mínima

Conecta cada vértice al menor costo total de aristas. Ambos algoritmos son correctos; elige por la densidad del grafo. Recorridos completos en árboles de expansión mínima.

Ordenamiento y Conectividad

Los tres aparecen constantemente en entrevistas. Consulta los patrones resueltos en algoritmos de grafos esenciales para entrevistas de programación.

Flujo en Redes

Modela el rendimiento, el emparejamiento y los cuellos de botella. El resultado elegante aquí es que el flujo máximo es igual al corte mínimo. Tratamiento completo en flujo en redes y el teorema de flujo máximo y corte mínimo.

¿Qué Algoritmo Debería Usar?

La forma más rápida de usar esta chuleta: lee la columna izquierda, salta a la derecha.

Si necesitas…Recurre a
Visitar o explorar cada nodoBFS o DFS
Encontrar el camino más corto en un grafo no ponderadoBFS
Encontrar el camino más corto con pesos no negativosDijkstra
Manejar pesos de arista negativosBellman-Ford
Obtener caminos más cortos entre todos los paresFloyd-Warshall
Encontrar un camino rápido con una heurística (mapas, videojuegos)A*
Conectar todo al costo mínimoKruskal o Prim
Ordenar tareas por sus dependenciasOrden topológico
Comprobar si dos nodos están conectados, o agrupar elementosUnion-Find
Encontrar clústeres en un grafo dirigidoTarjan o Kosaraju (SCC)
Maximizar el rendimiento o encontrar un cuello de botellaEdmonds-Karp (flujo máximo)

Convierte la tabla en intuición

Una chuleta te dice qué algoritmo; verlo ejecutarse te dice por qué. Recorre cualquiera de estos paso a paso en un grafo en vivo.

Abrir el Visualizador de Algoritmos

Preguntas Frecuentes

¿Cuál es la complejidad temporal del algoritmo de Dijkstra?

Con un montículo binario (cola de prioridad), el algoritmo de Dijkstra se ejecuta en tiempo O((V + E) log V) y espacio O(V). Con un simple arreglo en lugar de un montículo es O(V al cuadrado), que puede ser más rápido en grafos densos.

¿Qué algoritmo de grafos debería usar para caminos más cortos?

Depende del grafo. Usa BFS para grafos no ponderados, Dijkstra para pesos no negativos, Bellman-Ford cuando hay pesos negativos, Floyd-Warshall para caminos más cortos entre todos los pares, y A* cuando tienes una buena heurística (mapas y videojuegos).

¿Debería usar una lista de adyacencia o una matriz de adyacencia?

Usa una lista de adyacencia para grafos dispersos: usa O(V + E) espacio y es la opción por defecto para la mayoría de los problemas. Usa una matriz de adyacencia para grafos densos o cuando necesitas consultas de aristas en O(1), a costa de O(V al cuadrado) espacio.

¿Qué algoritmos de grafos debería memorizar para entrevistas de programación?

Los cinco esenciales son BFS, DFS, el algoritmo de Dijkstra, el ordenamiento topológico y union-find. Juntos cubren la gran mayoría de las preguntas de grafos en las entrevistas técnicas.

Recursos Adicionales de Aprendizaje

Guarda Esto y Luego Profundiza

Una chuleta te desatasca rápido. La verdadera soltura viene de ver ejecutarse estos algoritmos. Elige uno y dale a reproducir.

Practica con el Visualizador de Algoritmos