¿Se puede usar el algoritmo Floyd-Warshall para encontrar el ciclo más corto en un gráfico no dirigido?

En el algoritmo Floyd – Warshall para encontrar las rutas más cortas en un gráfico, inicialmente establece dist [u] [v] = [math] \ infty [/ math] y dist [v] [v] = 0. En otras palabras, la distancia desde cualquier vértice u al vértice v (u ≠ v) es infinita, y la distancia desde cualquier vértice v a sí mismo es 0.

En este caso, queremos que la ruta finalice en el vértice inicial, por lo que en lugar de establecer dist [v] [v] = 0, establecemos dist [v] [v] = [math] \ infty [/ math]. Esto significa que desde v, queremos la ruta más corta a v, que es lo mismo que encontrar el ciclo más corto que incluye el vértice v.

Una vez que tenemos todos los valores para dist [v] [v] después de ejecutar Floyd Warshall, tenemos la longitud del ciclo más corto en el gráfico que contiene el vértice v, para todos los v. Para encontrar el ciclo más corto en el gráfico (que necesita no incluye un vértice particular v), simplemente queremos encontrar min (dist [v] [v]), que será el ciclo más corto.

Editar: Esto solo funcionará si no hay ciclos negativos, lo cual es una suposición para Floyd Warshall.

No, no puede.

El algoritmo Floyd – Warshall se puede usar para encontrar el ciclo más corto si y solo si se dirige el gráfico. Para los gráficos dirigidos, el método es como Melissa explicó (configuración [matemática] dist [u] [u] = \ infty [/ matemática]). Pero no se puede usar en gráficos no dirigidos. Permítame darle un ejemplo contrario: suponga que el gráfico es un árbol (es decir, un gráfico conectado sin ciclos) y todos los pesos de los bordes son iguales a 1. Obviamente, no hay ciclo en este gráfico. Pero, ¿qué encuentra el Floyd-Warshall? Digamos que hay un borde entre los vértices [matemáticas] u [/ matemáticas] y [matemáticas] v [/ matemáticas]. Como el gráfico no está dirigido, tenemos [matemáticas] dist [u] [v] = dist [v] [u] = 1 [/ matemáticas] (observe la implementación del algoritmo Floyd – Warshall). Ahora en la iteración donde [matemáticas] i = j = u [/ matemáticas] y [matemáticas] k = v [/ matemáticas] vemos que [matemáticas] dist [i] [k] = dist [k] [j] = 1 [/ math] y [math] dist [i] [j] = dist [u] [u] = \ infty [/ math] por lo que la condición [math] dist [i] [j]> dist [i] [ k] + dist [k] [j] [/ math] se mantiene y establece [math] dist [i] [j] = 2 [/ math] que es [math] dist [u] [u] [/ math] y lo informa como un ciclo que incluye [math] u [/ math]. Tenga en cuenta que incluso si el gráfico tuviera un ciclo, su longitud mínima sería al menos 3 (un triángulo).

El problema es que el algoritmo Floyd-Warshall mantiene 2 bordes dirigidos en lugar de cada borde no dirigido. Este no es un problema en problemas como la ruta más corta de Todos los pares, pero en el ciclo más corto es un problema ya que podemos tener un ciclo dirigido usando 2 bordes dirigidos.

El algoritmo de ruta más corta de Floyd Warshall se puede usar en un gráfico que no tiene un ciclo negativo.

Ahora todo el gráfico no dirigido se puede convertir en un gráfico dirigido al especificarlo con 2 aristas. Si el gráfico no dirigido no tiene ningún peso de borde negativo, tendremos un gráfico sin ningún ciclo negativo y, por lo tanto, el algoritmo funcionará bien

Pero en el caso de que el gráfico no dirigido tenga un peso de borde negativo, se reemplazará por 2 bordes, lo que creará un ciclo negativo como se muestra a continuación y, por lo tanto, el algoritmo fallará.