2012-03-14 11 views
5

Hay un gráfico no dirigido en el que a cada nodo se le asigna un color. Tengo que encontrar el camino más corto desde cualquier nodo de color azul a cualquier nodo de color rojo. (Otros colores también pueden existir en el gráfico y aunque no importa, pero no se sabe cuántos colores hay). ¿Cómo puedo hacerlo en tiempo polinomial?Encontrar la ruta más corta entre dos nodos pertenecientes a dos subconjuntos disjuntos de un gráfico

+1

Estoy seguro de que el algoritmo de Dijkstra se puede usar de alguna forma para resolver esto, pero no he podido averiguar cómo. – anirudh

Respuesta

7

Como sugerencia, agregue dos nuevos nodos al gráfico; llámelos s y t. Conéctese a cada nodo azul con un borde de costo 0 y cada nodo rojo a t con un borde de costo 0. Luego, encuentre la ruta más corta desde s hasta t.

Espero que esto ayude!

+0

gracias, esta es de hecho la solución. – anirudh

+0

Polinomio tanto para agregar los nodos syt como para encontrar la ruta más corta entre ellos (por ejemplo, con Dijkstra), por lo que es polinomial. – pvoosten

+2

@lbp Hay muchas maneras fáciles de resolverlo en tiempo polinomial, puedes hacer Floyd-Warshall y encontrar el par (azul, rojo) con una distancia mínima. Podrías hacer Dijkstra | red | * | azul | veces, muy ineficientemente, y aún ser polinomio. Pero esta respuesta da una manera eficiente, no solo polinomial. – sdcvvc

Cuestiones relacionadas