0Pricing
Coding Interview Prep · Lección

Detecte ciclos en grafos dirigidos

Coloree nodos para encontrar aristas de retorno

Detecte ciclos en grafos dirigidos es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding Interview Prep incluye 4 lecciones en total.

Por qué importan los ciclos

Un ciclo dirigido significa que las dependencias vuelven sobre sí mismas. Detectarlo indica que no puede existir ningún orden topológico ni una planificación válida.

Los grafos no dirigidos son diferentes

Aquí, la detección de ciclos depende de la dirección. Seguir las aristas en el sentido incorrecto no cuenta, así que no se pueden aplicar los trucos de los grafos no dirigidos.

La idea de los tres colores

Asigne a cada nodo uno de tres colores: blanco significa no visitado, gris significa en proceso y negro significa completamente procesado.

WHITE, GRAY, BLACK = 0, 1, 2
color = [WHITE] * n

Gris significa que está en la pila

Un nodo gris se encuentra en el camino actual de DFS. Ha entrado en él, pero todavía no ha terminado de explorar todos sus descendientes.

Entrar en un nodo

Cuando DFS llega a un nodo, márquelo de gris antes de explorarlo. Así indica que forma parte del camino activo.

def dfs(u):
    color[u] = GRAY

La señal de la arista de retorno

Si llega a un vecino que ya está gris, ha encontrado una arista de retorno hacia el camino actual. Eso es un ciclo.

for v in adj[u]:
    if color[v] == GRAY:
        return True  # cycle

Recurrir en los nodos blancos

Un vecino blanco aún no se ha visitado, así que recurra en él. Devuelva True en cuanto cualquier llamada más profunda informe de un ciclo.

    elif color[v] == WHITE and dfs(v):
        return True

El negro es seguro

Un vecino negro ya se ha explorado por completo y no contiene ciclos, así que puede ignorarlo. Volver a visitarlo solo haría perder tiempo.

Terminar un nodo

Después de procesar todos los vecinos, marque el nodo de negro. Sale del camino activo y queda marcado como completo.

    color[u] = BLACK
    return False

Cubrir todos los componentes

El grafo puede estar desconectado, así que inicie DFS desde cada nodo que siga siendo blanco para asegurarse de comprobarlo por completo.

if any(color[u]==WHITE and dfs(u) for u in range(n)):
    print('cycle')

Tener en cuenta el límite de recursión

Los grafos profundos pueden desbordar la pila de recursión de Python. Aumente el límite o reescriba DFS con una pila explícita.

import sys
sys.setrecursionlimit(300000)

Comprobación rápida

Durante DFS llega a un vecino que está actualmente gris. ¿Qué acaba de encontrar?

Repaso: detección de ciclos

Coloree los nodos de blanco, gris y después negro. Un vecino gris durante DFS es una arista de retorno, lo que demuestra que existe un ciclo dirigido. 🔁

Preguntas frecuentes

¿La lección «Detecte ciclos en grafos dirigidos» es gratis?

Sí — el texto completo de «Detecte ciclos en grafos dirigidos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Detecte ciclos en grafos dirigidos»?

Coloree nodos para encontrar aristas de retorno Practicas Coding Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Coding Interview Prep?

No se requiere experiencia previa. Coding Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Detecte ciclos en grafos dirigidos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Coding Interview Prep?

Sí. Cada lección de Coding Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Ordenación topológica con el algoritmo de Kahn
  2. Detecte ciclos en grafos dirigidos
  3. Componentes fuertemente conexas
  4. Puentes y puntos de articulación
← Volver a Coding Interview Prep