Voici un arbre:Comment vérifier s'il y a un cercle dans un arbre?
Il y aura une racine.
Chaque noeud d'arbre a zéro ou plusieurs enfants.
Il est permis que deux nœuds pointent vers le même enfant. Dites, à la fois le nœud A et le noeud B a un enfant C.
Cependant, il est interdit que,
nœud A est un rejeton de noeud B et noeud B est un descendants du noeud A.
Un cas est interdit
nœud A a un enfant noeud C et le nœud D,
Les deux nœuds C et D a un noeud enfant E,
nœud E a un enfant de A.
La question est, comment déterminer ce cercle de la manière la plus rapide?
MISE À JOUR: Je réalise qu'il s'agit de trouver un cycle dans un graphe orienté. Tout à l'heure j'ai réussi à trouver une solution similaire à l'algorithme de Tarjan.
Merci pour votre commentaire.
Ceci est appelé un "cycle" (pas un cercle) dans la théorie des graphes. Vous essayez de vérifier qu'un graphe donné est un "graphe acyclique orienté" ou DAG en abrégé. http://en.wikipedia.org/wiki/Directed_acyclic_graph –
Aussi, cette question a déjà été posée et répondue ici: http://stackoverflow.com/questions/261573/best-algorithm-for-detecting-cycles-in- a-directed-graph –
La structure de données que vous avez est un graphe orienté, pas un arbre. Un nœud d'arbre ne peut pas avoir plusieurs parents. – interjay