Algoritmia - a

 
Vista:

a

Publicado por J Luis (1 intervención) el 20/06/2006 18:19:55
Necesito un algoritmo de camino euleriano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Camino euleriano

Publicado por Alejandro (307 intervenciones) el 05/03/2024 23:37:43
J, un camino euleriano es un camino en un grafo que visita cada arista exactamente una vez. Aquí tienes un algoritmo que encuentra un camino euleriano en un grafo dirigido o no dirigido, siempre que exista al menos un camino euleriano:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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.")

Este algoritmo utiliza una búsqueda en profundidad (DFS) para encontrar un camino euleriano. Asegúrate de ajustar la representación de tu grafo según sea necesario para tu implementación específica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar