a
Publicado por J Luis (1 intervención) el 20/06/2006 18:19:55
Necesito un algoritmo de camino euleriano.
Valora esta pregunta


0
from collections import defaultdict
class Grafo:
def __init__(self):
self.grafo = defaultdict(list)
def agregar_arista(self, u, v):
self.grafo[u].append(v)
def dfs(self, v, visitados, recorrido):
visitados[v] = True
recorrido.append(v)
for i in self.grafo[v]:
if not visitados[i]:
self.dfs(i, visitados, recorrido)
def camino_euleriano(self):
visitados = defaultdict(bool)
recorrido = []
# Encuentra un vértice con grado impar (si existe) para empezar el recorrido
inicio = next(iter(self.grafo))
for v in self.grafo:
if len(self.grafo[v]) % 2 != 0:
inicio = v
break
self.dfs(inicio, visitados, recorrido)
# Verifica si todas las aristas fueron visitadas
for v in self.grafo:
if not visitados[v] and len(self.grafo[v]) > 0:
return None # No es posible formar un camino euleriano
return recorrido
# Ejemplo de uso
grafo = Grafo()
grafo.agregar_arista(0, 1)
grafo.agregar_arista(1, 2)
grafo.agregar_arista(2, 0)
grafo.agregar_arista(1, 3)
grafo.agregar_arista(3, 4)
grafo.agregar_arista(4, 1)
camino_euleriano = grafo.camino_euleriano()
if camino_euleriano:
print("Camino euleriano:", camino_euleriano)
else:
print("No hay camino euleriano en el grafo.")