Bueno, el problema está en después de todo. Mantendré la respuesta anterior, ya que también funciona para el caso dirigido (que es NPC, como se respondió en la otra pregunta), y muestra que es F P T con respecto a l .PFPTl
En el caso no dirigido, es solucionable, determinísticamente a través del flujo de costo mínimo (esto podría no funcionar en las escalas a las que se refiere en la pregunta, pero es mejor que el algoritmo exponencial.
El siguiente procedimiento decidirá si alguna arista debe ser parte del gráfico de salida. Para responder al problema original, simplemente recorra todos los bordes.e=(u,v)∈E
Para crear la red de flujo, haga lo siguiente:
Paso 1: expanda para tener un vértice x e y reemplace e con los bordes ( u , x e ) , ( x e , u ) , ( v , x e ) , ( x e , v ) (se dirigen como un parte de la red de flujo), establezca su costo en 0.exee(u,xe),(xe,u),(v,xe),(xe,v)
txet−t+(t−,t+)
{a,b}∈E(a+,b−),(b+,a−)
ye(s,ye),(t,ye)
Paso 5: establezca todas las capacidades en 1.
xeye
Análisis:
- xeyexe⇝s→yexe⇝t→ye
- Las rutas son disjuntas, ya que para cada vértice solo hay 1 capacidad en el arco .t(t−,t+)
- Las rutas devueltas son las dos rutas cuya suma de distancias es mínima, y ese también es el costo del flujo encontrado. Esto nos permite agregar al gráfico de salida o eliminar de otra manera.e