Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En la teoría de grafos, un camino euleriano es un camino que pasa por cada arista una y solo una vez. Un
ciclo o circuito euleriano es un camino cerrado que recorre cada arista exactamente una vez. El problema de
encontrar dichos caminos fue discutido por primera vez por Leonhard Euler, en el famoso problema de los
puentes de Königsberg.
Índice
Ciclos eulerianos
Historia
Casos
Teorema
Propiedades
Construcción de trayectos y circuitos
Algoritmo de Fleury
Implementación en C++ del algoritmo de Fleury
Algoritmo de Hierholzer
Contando circuitos eulerianos en dígrafos
Véase también
Referencias
Ciclos eulerianos
En la imagen, es un ciclo euleriano, luego es un grafo euleriano.
Un grafo es una representación, un modelo, compuesto por un número determinado de vértices (nodos) y
un número de arcos (aristas) que los relacionan, cada arista o arco tiene la capacidad de relacionar dos
nodos. La palabra ciclo se emplea en teoría de grafos para indicar un camino cerrado en un grafo, es decir,
en que el nodo de inicio y el nodo final son el mismo, como contrapartida un camino hamiltoniano es un
camino que recorre todos los vértices de un grafo sin pasar dos veces por el mismo vértice. Si el camino es
cerrado se dice un ciclo hamiltoniano.
Historia
El origen de la teoría de los ciclos eulerianos fue planteado y resuelto por el propio Leonhard Euler en 1736
en un problema que tiene el nombre de Siete puentes de la ciudad de Königsberg (Prusia oriental en el
siglo XVIII y actualmente, Kaliningrado, provincia rusa) dando origen a la Teoría de los grafos.
El problema se enuncia de la siguiente forma: Dos islas en el río
Pregel, en Königsberg se unen entre ellas y con la tierra firme
mediante siete puentes. ¿Es posible dar un paseo empezando por
una cualquiera de las cuatro partes de tierra firme, cruzando cada
puente una sola vez y volviendo al punto de partida?
Euler demostró que no era posible puesto que el número de líneas que inciden en cada punto no es par
(condición necesaria para entrar y salir de cada punto, y para regresar al punto de partida, por caminos
distintos en todo momento).
Casos
Dado un grafo conexo (no existen nodos aislados) y no dirigido , si tiene exactamente dos
vértices de grado impar, entonces tiene un camino euleriano no cerrado. En caso de que todos los
vértices tengan grado par, tiene un ciclo euleriano.
Teorema
Dado no orientado y conexo; si tiene nodos de grado impar, entonces puede ser escrito
como unión de caminos (simples) distintos sobre los arcos y valen las siguientes expresiones:
1) es euleriano;
2) con grado y par.
Propiedades
Un grafo conexo y no dirigido se dice que es euleriano si cada vértice tiene un grado par.
Un grafo no dirigido es euleriano si es conexo y si se puede descomponer en uno con los
vértices disjuntos.
Si un grafo no dirigido G es euleriano entonces su gráfo-línea L(G) se dice que es también
euleriano.
Un grafo dirigido es euleriano si es conexo y cada vértice tiene grados internos iguales a
los externos.
Un grafo no dirigido se dice que es susceptible de ser recorrido (en inglés: traversable) si
es conexo y dos vértices en el grafo tienen grado impar.
Algoritmo de Fleury
El algoritmo de Fleury es un algoritmo elegante pero ineficiente cuyo origen se remonta al año 1883.
Considerando un grafo del que sabemos que todas las líneas en la misma componente y al menos dos
vértices de ángulo impar. El algoritmo comienza en el vértice del ángulo impar. En cada paso se elige el
siguiente lado que queda unido al punto anterior por una sola línea. Finalmente nos movemos al lado que
queda en el vértice sobrante. Al concluir el algoritmo, no quedan lados sin recorrer, y la secuencia que
queda sigue un ciclo Euleriano sin vértices de ángulos impares. También puede quedar un trayecto
Euleriano si hay exactamente dos vértices de ángulo impar.
La complejidad correspondiente a este
algoritmo es O(n^2), aunque hace unos años, esta fue mejorada hasta alcanzar una complejidad
pero sigue siendo todavía un recorrido más lento que otros algoritmos.
// Implemetación en c++
#include <iostream>
#include <string.h>
#include <algorithm>
#include <list>
class Graph
private:
public:
// Constructor y destructor
void printEulerTour();
};
void Graph::printEulerTour()
int u = 0;
if (adj[i].size() & 1)
{ u = i; break; }
printEulerUtil(u);
void Graph::printEulerUtil(int u)
list<int>::iterator i;
int v = *i;
rmvEdge(u, v);
printEulerUtil(v);
int count = 0;
list<int>::iterator i;
if (*i != -1)
count++;
if (count == 1)
return true;
bool visited[V];
rmvEdge(u, v);
addEdge(u, v);
*iv = -1;
*iu = -1;
// Marcamos el actual
visited[v] = true;
int count = 1;
// Método recursivo
list<int>::iterator i;
return count;
int main()
// Ejemplos
Graph g1(4);
g1.addEdge(0, 1);
g1.addEdge(0, 2);
g1.addEdge(1, 2);
g1.addEdge(2, 3);
g1.printEulerTour();
Graph g2(3);
g2.addEdge(0, 1);
g2.addEdge(1, 2);
g2.addEdge(2, 0);
g2.printEulerTour();
Graph g3(5);
g3.addEdge(1, 0);
g3.addEdge(0, 2);
g3.addEdge(2, 1);
g3.addEdge(0, 3);
g3.addEdge(3, 4);
g3.addEdge(3, 2);
g3.addEdge(3, 1);
g3.addEdge(2, 4);
g3.printEulerTour();
return 0;
Algoritmo de Hierholzer
Elegir cualquier vértice v para empezar, y seguir el recorrido de una línea hasta llegar de
nuevo a v. No es posible dejar de avanzar en cualquier vértice que no sea v, ya que incluso
el grado de todos los vértices asegura que cuando se realiza una traza, deben usarse todas
las líneas excepto una, dejando un vértice w. El recorrido formado, puede no cubrir todos
los vértices y lados en un grafo o traza inicial.
Mientras que exista un vértice u que pertenezca al actual recorrido pero que tenga lados
adyacentes no pertenecientes a la traza, se comienza de nuevo desde u, siguiendo los
lados no usados hasta regresar a u, y unir el recorrido formado durante esta traza a la
anterior.
Usando estas estructuras de datos como doblemente unidas para mantener un conjunto de lados incidentes
no usados en cada vértice, una lista de vértices del recorrido actual y mantener el recorrido en sí mismo es
necesario buscar un nuevo vértice para el recorrido, y conectar ambos al mismo vértice, de manera que la
ejecución de ambos pueda llevarse a cabo de manera conjunta y la complejidad final del algoritmo sea
lineal (O(E)) sobre la cantidad de aristas.
En dicho teorema se menciona que dado un dígrafo euleriano G := (V, E), el número ciclos eulerianos no-
equivalentes en el grafo es
o equivalentemente
Véase también
Problema de los puentes de Königsberg
Ciclo hamiltoniano
Problema del cartero chino
Glosario en teoría de grafos
Referencias
"Solutio problematis ad geometriam situs pertinentis", Euler, L.,Comment. Academiae Sci. I.
Petropolitanae 8 (1736), 128-140.
"Über die Möglichkeit, einen Linienzug ohne Wiederholung und ohne Unterbrechnung zu
umfahren", Hierholzer, C. Mathematische Annalen 6 (1873), 30-32.
Récréations Mathématiques IV, Lucas, E., Paris, 1921.
"Deux problemes de geometrie de situation", Fleury, Journal de mathematiques
elementaires (1883), 257-261.
"Discrete Mathematics with Applications", Susanna Epp, Fourth Edition
"Discreta Mathematics and its application"", Rosen 7.ª edición
https://en.wikipedia.org/wiki/Eulerian_path
Obtenido de «https://es.wikipedia.org/w/index.php?title=Ciclo_euleriano&oldid=142302261»
Esta página se editó por última vez el 15 mar 2022 a las 23:18.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0;
pueden aplicarse
cláusulas adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.