La recherche de l'algorithme de trouver euler chemin
Je suis à la recherche d'un algorithme pour trouver une Euler chemin dans un graphe.
J'ai vu un bon un, il y a quelques semaines mais je ne peux pas le trouver maintenant, je me souviens de marquage des bords, quelque chose avec pair/impair connexions...
Connaissez-vous un semblable, simple et directe de l'algorithme?
OriginalL'auteur user2489034 | 2013-07-04
Vous devez vous connecter pour publier un commentaire.
De Graph-Magics.com, pour un graphe non-dirigé, ce qui vous donnera le tour dans le sens inverse, c'est à dire à partir de la fin de vertex pour le début de vertex:
Répétez l'étape 2 jusqu'à ce que le sommet n'a pas plus de voisins et de la pile est vide.
Autrement:
OriginalL'auteur MJW
Hierholzer de l'algorithme est une meilleure façon de trouver Euler chemin dans un graphe orienté.
http://stones333.blogspot.com/2013/11/find-eulerian-path-in-directed-graph.html
Il a le code en plus de cas de test.
OriginalL'auteur stones333
Je n'ai pas de code dans n'importe quelle langue, mais je sais algorithme, comment les trouver et je vais l'écrire ici.
Supposons que nous avons graphe ayant n nœuds. Nous appelons le degré d'un nœud nombre d'arêtes connectées à ce nœud. Au premier abord, nous devons dire que la somme des degrés de chaque nœud serait même selon la "poignée de main" du problème.
Supposons maintenant que nous avons quelques Euler chemin p, à partir du nœud s et se terminant vers le nœud f. Ensuite, pour chaque nœud, qui est différente de st et t, chaque fois que nous entrons dans ce nœud, nous devrions les laisser(si nous ne pars pas, alors on ne pourra pas accéder à la grande finale f nœud), donc pour ces nœuds de degré devrait être de même, et pour s et f, si elles sont différentes degré serait étrange, car nous gauche s à la première fois, et puis après chaque entrée, nous avons quitté le s nœud, donc, il y aurait 1 + 2*degré n, où n est le nombre de fois où nous avons visité s à nouveau. En va de même pour f. Donc, il devrait y avoir 2 nœuds avec odd degré si il existe d'Euler chemin. Et si il y a le cercle d'Euler, puis degré de chaque nœud doit être de même, et si c'est le cas, alors il n'a pas d'importance qui nœud de nous choisir comme s, nous mettrons fin à la cercle en s aussi.
Maintenant le problème est de savoir comment obtenir du cercle d'Euler/chemin d'accès. Ici, nous avons besoin de définir le "pont" dans le graphique. Le pont est une arête de propriété spécifique, si on supprime ce bord, puis dans le reste du graphique le nombre de composants augmente d'une unité. En d'autres termes, le bridge est un avantage qui est la seule connexion de bord pour les deux composants dans le graphique.
Puisque nous savons ce qui est du pont, on peut définir l'algorithme. S'il y a exactement 2 nœuds avec le même degré:
1) nous partons de l'un d'eux et aller de l'avant à la prochaine nœuds en choisissant les bords connecté au nœud actuel.
2) si l'on ne devait choisir lisière entre le pont et nonbridge, on doit toujours choisir nonebridge.
3) si il y a le nœud nonebridge bord gauche, alors seulement nous pouvons choisir n'importe quel pont.
Si il n'y a pas de nœud de degré impair, alors nous pouvons commencer à partir de n'importe quel nœud et suivre ces 3 règles.
C'est l'ensemble de l'algorithme qui fonctionne toujours.
voici quelques liens utiles également.
https://www.math.ku.edu/~jmartin/cours/math105-F11/Conférences/chapitre 5-part2.pdf
http://www.graph-magics.com/articles/euler.php
OriginalL'auteur Mamuka
Une euler chemin existe que si un graphe a exactement deux sommets impairs degré.Ce sont en fait les points d'extrémité de la droite d'euler chemin.
De sorte que vous pouvez trouver l'un des sommets impairs degré et le début de la traversée du graphe avec DFS:à mesure Que vous avancez ont visité un tableau de bords.Ne pas traverser un bord à deux reprises.
Si vous il n'y a pas de bord gauche d'un sommet, vérifier si tous les bords ont été visités, si vous avez terminé.
Pour stocker le réel euler chemin, vous pouvez garder un prédécesseur de tableau, qui stocke les précédents sommets du chemin.
OriginalL'auteur Aravind
Soo c'est ma solution , j'ai utilisé le bloc finally pour imprimer parce que je suis d'exception "de la pile est vide" et je n'ai pas vraiment le temps de corriger cela. J'espère que cela aide quelqu'un!
OriginalL'auteur Jure Kljajic