Tengo que encontrar un ciclo negativo en un gráfico ponderado dirigido. Sé cómo funciona el algoritmo Bellman Ford, y que me dice si hay un ciclo negativo alcanzable. Pero no lo nombra explícitamente.
¿Cómo puedo obtener la ruta real del ciclo?
Después de aplicar el algoritmo estándar, ya hicimos iteraciones y no debería ser posible ninguna mejora adicional. Si aún podemos reducir la distancia a un nodo, existe un ciclo negativo.
Mi idea es: dado que conocemos el borde que aún puede mejorar el camino y conocemos el predecesor de cada nodo, podemos rastrear nuestro camino desde ese borde hasta que lo encontremos nuevamente. Ahora deberíamos tener nuestro ciclo.
Lamentablemente, no encontré ningún documento que me diga si esto es correcto. Entonces, ¿realmente funciona así?
Editar: este ejemplo demuestra que mi idea es incorrecta. Dado el siguiente gráfico, ejecutamos Bellman-Ford desde el nodo .
Procesamos aristas en el orden . Después de n - 1 iteraciones obtenemos distancias de nodo: 1 : - 5 2 : - 30 3 : - 15
y tabla padre:
tiene padre 3 2 tiene padre 3 3 tiene padre 2
¿Cómo podemos resolver este problema?
fuente
s'
yt'
). Me pareció que un nuevo nodo fuente, conectado a todos los vértices existentes por un borde de cualquier longitud, activaría todos los ciclos.Su ejemplo no contradice su idea. De hecho, has encontrado un ciclo negativo. Creo que la idea que ilustra su ejemplo es que el vértice de origen podría no ser un nodo en el ciclo negativo.
fuente