jorcoval escribió:Djikstra donde la arista recorrida tiene peso infinito y si el algoritmo se bloquea (porque quedan nodos por visitar) saltas a un nodo libre de forma aleatoria?
No se trata de "resolver" una solución particular del grafo, sino de determinar cuál es el número mínimo de caminos necesarios para recorrer todas las aristas una sola vez cada una.
Y yo creo que no existe un caso general o un método que permita calcular ese mínimo, distinto de la fuerza bruta.
Puestos a resolverlo, en lugar de Dijkstra y saltos al azar (que solo te da una solución), se me antoja más razonable hacer recorridos en profundidad (backtracking a destajo). Primero se transforma el grafo en su "dual" (aristas<->nodos) y luego se computan los recorridos, todos los posibles para cada nodo (arista en este caso), y con todos los nodos del grafo (algo ciertamente costoso en tiempo). Finalmente cuentas el número de hojas en cada uno y el árbol que menos hojas tenga, es la solución (sin olvidar que en este caso los vértices del árbol son aristas en el grafo original, a la hora de determinar los caminos).
Para una solucion particular es mucho más rápido descomponer el grafo original de manera que quede el mayor número de nodos con grado par. De ese modo, ahí existe un camino euleriano. Y con el resto, tendrás un camino adicional por cada arista, excepto si tiene alguna más adyacente (de las descartadas antes) en cuyo caso no se suma.