Fondamentaux

Marches, pistes, chemins, circuits et cycles

Une marche peut tout répéter, une piste ne répète jamais une arête et un chemin ne répète jamais un sommet ; les marches fermées, les circuits et les cycles sont les versions qui reviennent à leur point de départ. Ce guide présente les six définitions sur un même graphe d'exemple, explique pourquoi les manuels emploient ces mots différemment, prouve que toute marche contient un chemin, compte les marches avec les puissances de la matrice d'adjacence et montre pourquoi les chemins sont tellement plus difficiles à compter, avec du code Python testé tout du long.

25 Min de lecture Mis à jour : Octobre 2026 Niveau Débutant
Mohammed Islam Hadjoudj
Mohammed Islam Hadjoudj
Expert Operations Research Engineer

1. Six mots pour se déplacer dans un graphe

La théorie des graphes dispose d'une petite famille de mots pour désigner les déplacements le long des arêtes d'un graphe : marche, piste et chemin pour les parcours qui peuvent se terminer n'importe où, et marche fermée, circuit et cycle pour les parcours qui reviennent à leur point de départ. Ils ne diffèrent que sur trois points : un sommet peut-il être visité deux fois, une arête peut-elle être empruntée deux fois, et le parcours se termine-t-il à son sommet de départ.

Ce sont les définitions employées par la plupart des manuels modernes de théorie des graphes, mais pas par tous, et la section 4 montre où les principales conventions divergent. L'exemple suivi est une bande de quatre triangles, avec 6 sommets et 9 arêtes :

edges = {AB, AC, BC, BD, CD, CE, DE, DF, EF}      6 sommets, 9 arêtes

rangée du haut :   B     D     F
rangée du bas :  A     C     E

deg:   A 2   B 3   C 4   D 4   E 3   F 2
Six copies du graphe de la bande, chacune avec un parcours tracé en couleur et ses pas numérotés. La marche A, B, C, A, B, D emprunte deux fois l'arête A-B. La piste A, C, B, D, C, E passe deux fois par C mais ne répète aucune arête. Le chemin A, C, D, F ne répète rien. La marche fermée A, B, C, D, B, A emprunte deux fois l'arête A-B et revient en A. Le circuit A, B, C, D, E, C, A revient en A en passant deux fois par C sans répéter d'arête. Le cycle A, B, D, F, E, C, A revient en A et ne répète rien.
Un graphe, six types de parcours. Rangée du haut : les parcours qui se terminent ailleurs. Rangée du bas : les parcours qui reviennent en A.

Chaque parcours de la figure reçoit le nom le plus précis des six qui lui convienne :

Un sommet seul, comme A, compte aussi : c'est une marche de longueur 0 et un chemin de longueur 0, que l'on appelle marche triviale ou chemin trivial. Cela compte surtout pour les cas limites des preuves et du code, où « le chemin d'un sommet à lui-même » doit exister et avoir la longueur 0.

2. Comment les six s'emboîtent

Les définitions s'emboîtent. Tout chemin est une piste, car un parcours qui ne revisite jamais un sommet ne peut pas réemprunter une arête, et toute piste est une marche. Du côté fermé, tout cycle est un circuit et tout circuit est une marche fermée. Aucune de ces inclusions ne s'inverse, comme le montrent les exemples de la section 1. Trois questions suffisent toujours à trouver le bon nom, et l'ordre dans lequel on les pose n'a pas d'importance.

À gauche : un schéma de décision. Première question : le parcours se termine-t-il là où il a commencé ? Ensuite : répète-t-il une arête ? Si oui, c'est une marche ou une marche fermée. Sinon : répète-t-il un sommet ? Si oui, c'est une piste ou un circuit ; sinon, un chemin ou un cycle. À droite : deux séries de boîtes emboîtées, les chemins dans les pistes dans les marches, et les cycles dans les circuits dans les marches fermées, avec les décomptes de A à F : 13 chemins, 23 pistes et une infinité de marches.
Trois questions par oui ou non suffisent à nommer n'importe quel parcours. Chaque type est contenu dans le suivant, si bien que les décomptes ne peuvent que croître des chemins aux pistes puis aux marches.

Les décomptes de l'exemple montrent à quelle vitesse les familles s'écartent. De A à F il y a exactement 13 chemins : 3 de longueur 3, 6 de longueur 4 et 4 de longueur 5. Il y a 23 pistes : les 13 chemins plus 10 pistes qui passent deux fois par un même sommet, comme A, C, B, D, C, E, F. Il y a une infinité de marches, car une marche peut faire des allers-retours sur n'importe quelle arête aussi souvent qu'elle le veut. Le nombre de marches ne devient fini que lorsque la longueur est fixée, et la section 6 les compte exactement.

Deux détails piègent les débutants :

Pourquoi un cycle doit-il avoir une longueur d'au moins 3 ? Dans un graphe simple, les marches fermées les plus courtes, comme A, B, A, partent le long d'une arête et reviennent aussitôt par la même. Elles répètent une arête, donc ce ne sont ni des circuits ni des cycles. Dans un multigraphe la situation change : deux arêtes parallèles entre les deux mêmes sommets forment un cycle de longueur 2, et une boucle forme un cycle de longueur 1. C'est aussi pourquoi la définition formelle d'une marche énumère les arêtes en plus des sommets, v0, e1, v1, e2, ..., vk : lorsque deux arêtes parallèles relient les mêmes sommets, la liste des sommets seule ne dit pas quelle arête a été empruntée. Dans un graphe simple, les sommets déterminent les arêtes, et il suffit d'énumérer les sommets.

3. Vérifier un parcours avec du code

Les définitions se traduisent directement en une courte fonction. Elle prend un graphe simple et une suite de sommets, vérifie que chaque pas suit une arête, puis pose les trois questions de la section 2.

def graph(edges):
    adj = {}
    for u, v in edges:
        adj.setdefault(u, set()).add(v)
        adj.setdefault(v, set()).add(u)
    return adj

def classify(adj, seq):
    """Nomme le type de marche le plus précis auquel correspond la suite de sommets seq."""
    steps = list(zip(seq, seq[1:]))
    if any(v not in adj[u] for u, v in steps):
        return 'not a walk'
    closed = len(seq) > 1 and seq[0] == seq[-1]
    edges = [frozenset(step) for step in steps]
    no_repeated_edge = len(set(edges)) == len(edges)
    inner = seq[:-1] if closed else seq          # une marche fermée finit là où elle a commencé
    no_repeated_vertex = len(set(inner)) == len(inner)
    if not closed:
        return 'path' if no_repeated_vertex else 'trail' if no_repeated_edge else 'walk'
    if no_repeated_vertex and len(edges) >= 3:
        return 'cycle'
    return 'circuit' if no_repeated_edge else 'closed walk'

strip = graph(['AB', 'AC', 'BC', 'BD', 'CD', 'CE', 'DE', 'DF', 'EF'])
for seq in ['ABCABD', 'ACBDCE', 'ACDF', 'ABCDBA', 'ABCDECA', 'ABDFECA', 'ABA', 'ABE']:
    print(seq, classify(strip, seq))
# ABCABD walk
# ACBDCE trail
# ACDF path
# ABCDBA closed walk
# ABCDECA circuit
# ABDFECA cycle
# ABA closed walk
# ABE not a walk

La fonction rejette d'abord A, B, E, car il n'y a pas d'arête entre B et E. Pour un parcours fermé, elle compare les sommets sans le dernier, puisqu'une marche fermée répète toujours son premier sommet à la fin. Le test len(edges) >= 3 est ce qui empêche A, B, A d'être signalé comme un cycle : ses deux sommets sont différents, mais ses deux pas empruntent la même arête. La vérification complète prend un temps proportionnel à la longueur du parcours.

4. Pourquoi les manuels divergent

Si vous avez déjà rencontré ces mots, vous les avez peut-être rencontrés avec d'autres sens. La théorie des graphes s'est développée dans plusieurs pays et plusieurs domaines à la fois, et son vocabulaire n'a jamais été entièrement normalisé. Le tableau compare les mots anglais que quelques manuels très utilisés donnent aux mêmes quatre idées.

ManuelSommets et arêtes peuvent se répéterAucune arête répétéeAucun sommet répétéFermé, aucune arête répétée
Ore (1962)edge sequencepathsimple path, ou arccyclic path
Harary (1969)walktrailpathclosed trail
West (2001)walktrailpathcircuit
Bondy et Murty (2008)walktrailpathclosed trail
Chartrand et Zhang (2012)walktrailpathcircuit, de longueur 3 ou plus
Rosen (2012)pathsimple pathpas de nom distinctsimple circuit
Diestel (2017)walksans nompathsans nom

Depuis le livre de Harary de 1969, la plupart des ouvrages de théorie des graphes s'accordent sur l'essentiel : le mot walk (marche) désigne un parcours qui peut tout répéter, et le mot path (chemin) un parcours qui ne répète rien. En 1962, l'ouvrage d'Ore Theory of Graphs montrait l'usage plus ancien, dans lequel path désignait un parcours sans arête répétée, ce que l'on appelle aujourd'hui trail (piste). Le manuel de Rosen intitulé Discrete Mathematics and Its Applications, ouvrage de référence pour les premiers cours de mathématiques discrètes, en conserve une version : path y désigne n'importe quelle marche (walk), et le terme simple path un parcours qui ne répète pas d'arête. Rosen signale lui-même le conflit et cite walk, closed walk et trail comme les mots des autres ouvrages, mais un étudiant qui apprend « path » chez Rosen puis ouvre un livre de théorie des graphes y trouvera le même mot avec un sens plus strict.

Les mots circuit et cycle sont les moins stables. West, ainsi que Chartrand et Zhang, emploient circuit pour une piste fermée (closed trail), comme le fait cet article. Ore employait circuit pour ce que l'on appelle aujourd'hui un cycle, et les ingénieurs disent souvent « circuit » pour n'importe quelle boucle fermée. Les graphes orientés ajoutent une couche de plus : dans les ouvrages classiques de Berge, écrits d'abord en français, un parcours dans un graphe non orienté est une chaîne (chain en anglais) et un parcours fermé un cycle, tandis qu'un parcours qui suit les flèches est un chemin (path en anglais) et un parcours fermé un circuit.

L'habitude la plus sûre consiste à énoncer la définition que vous utilisez la première fois qu'un mot apparaît, ou à remplacer le mot ambigu par la propriété : « un parcours qui ne répète aucun sommet » ne peut pas être mal compris. En lisant, cherchez la définition dans le premier chapitre et attendez-vous à ce qu'elle diffère de celle du dernier livre que vous avez lu.

La victime la plus connue de ces noms est le chemin eulérien. Il emprunte chaque arête d'un graphe exactement une fois et passe généralement plusieurs fois par certains sommets ; dans le vocabulaire de cet article, c'est donc une piste, pas un chemin. Le nom survit parce que le problème est plus ancien que le vocabulaire, et « piste eulérienne » est aujourd'hui le nom le plus rigoureux pour la même chose. Le chemin hamiltonien, qui visite chaque sommet exactement une fois, est vraiment un chemin. La section 8 revient sur les deux.

5. Toute marche contient un chemin

Le fait le plus utile sur les marches est que la répétition n'est jamais nécessaire pour aller quelque part. S'il existe une marche de u à v, il existe un chemin de u à v, et ce chemin n'est pas plus long que la marche. La preuve est un raccourci. Si la marche visite un sommet x deux fois, supprimez tout ce qui se trouve entre les deux visites : la marche va toujours de u à v, et elle est plus courte. Recommencez jusqu'à ce qu'aucun sommet ne se répète. Ce qui reste est un chemin.

À gauche : la piste A, C, B, D, C, E, F de longueur 6 tracée sur la bande ; la boucle C, B, D, C entre les deux visites de C est dessinée en pointillés rouges, et la couper laisse le chemin A, C, E, F de longueur 3, en vert. À droite : la marche fermée A, B, C, D, C, A de longueur 5, coupée au sommet répété C en deux morceaux : le triangle A, B, C, A de longueur 3, qui est impaire, et l'aller-retour C, D, C de longueur 2, qui est paire.
Couper une boucle transforme une marche en un chemin plus court ayant les mêmes extrémités. Couper une marche fermée impaire laisse toujours un morceau impair, et le dernier morceau impair est un cycle impair.

Ce petit lemme a de grandes conséquences :

Les marches fermées demandent plus de soin. Une marche fermée ne contient pas toujours un cycle : A, B, A est fermée mais n'en contient aucun. Une marche fermée de longueur impaire en contient toujours un, et le cycle qu'elle contient est lui aussi impair. Coupez la marche fermée en un sommet répété pour obtenir deux marches fermées plus courtes. Leurs longueurs ont pour somme la longueur impaire d'origine, donc l'une d'elles est impaire. Gardez la marche impaire et recommencez. Le processus s'arrête sur une marche fermée impaire sans sommet répété, et comme un graphe simple n'a aucune marche fermée de longueur 1, cette marche est un cycle de longueur au moins 3.

Cet argument est l'étape clé du théorème de Kőnig : un graphe est biparti exactement lorsqu'il n'a aucun cycle de longueur impaire. Un circuit se découpe de la même façon, en cycles qui ne partagent aucune arête. Le programme ci-dessous réalise les trois opérations : il coupe les boucles d'une marche, trouve un cycle impair dans une marche fermée impaire et découpe un circuit en cycles.

def walk_to_path(walk):
    """Coupe chaque boucle. Le résultat est un chemin ayant les deux mêmes extrémités."""
    path, where = [], {}
    for v in walk:
        if v in where:                       # retour en v : on supprime tout depuis la dernière visite
            for u in path[where[v] + 1:]:
                del where[u]
            del path[where[v] + 1:]
        else:
            where[v] = len(path)
            path.append(v)
    return ''.join(path)

def split_closed_walk(walk):
    """Coupe une marche fermée en son premier sommet répété, en deux marches fermées plus courtes."""
    seen = {}
    for i, v in enumerate(walk[:-1]):
        if v in seen:
            j = seen[v]
            return walk[j:i + 1], walk[:j] + walk[i:]
        seen[v] = i
    return None                              # rien ne se répète : un cycle, ou un aller-retour

def odd_cycle(walk):
    """Une marche fermée de longueur impaire contient toujours un cycle de longueur impaire."""
    while True:
        parts = split_closed_walk(walk)
        if parts is None:
            return walk
        walk = next(p for p in parts if (len(p) - 1) % 2 == 1)

def circuit_to_cycles(walk):
    """Découpe un circuit en cycles qui ne partagent aucune arête."""
    parts = split_closed_walk(walk)
    if parts is None:
        return [walk]
    return circuit_to_cycles(parts[0]) + circuit_to_cycles(parts[1])

print(walk_to_path('ACBDCEF'))               # marche de longueur 6
# ACEF
print(odd_cycle('ABCDCA'))                   # marche fermée de longueur 5, arête C-D empruntée deux fois
# ABCA
print(circuit_to_cycles('ABCDECA'))          # circuit de longueur 6 passant deux fois par C
# ['CDEC', 'ABCA']

La piste A, C, B, D, C, E, F visite C deux fois, donc la boucle C, B, D, C disparaît, ce qui laisse A, C, E, F. La marche fermée A, B, C, D, C, A se coupe au sommet C en C, D, C, de longueur 2, et A, B, C, A, de longueur 3, qui est le cycle impair. Le circuit A, B, C, D, E, C, A se coupe au sommet C en deux triangles, C, D, E, C et A, B, C, A.

Le découpage du circuit est un cas particulier d'un théorème publié par Oswald Veblen en 1912 : les arêtes d'un graphe peuvent être réparties en cycles qui ne partagent aucune arête si et seulement si chaque sommet est de degré pair. Un cycle utilise deux arêtes en chaque sommet par lequel il passe, donc les degrés doivent être pairs ; la réciproque s'obtient en retirant un cycle de façon répétée, ce qui garde tous les degrés pairs.

6. Compter les marches avec les puissances de matrices

Les marches sont difficiles à énumérer mais faciles à compter. Écrivez le graphe sous la forme de sa matrice d'adjacence A, avec un 1 à la ligne u, colonne v lorsque u et v sont adjacents et un 0 sinon. Le guide de la représentation des graphes explique la matrice elle-même. Un fait classique est alors vrai : le coefficient à la ligne u, colonne v de la puissance Ak est le nombre de marches de longueur k de u à v.

La raison tient à la règle de multiplication des matrices. Une marche de longueur k de u à v est une marche de longueur k - 1 de u jusqu'à un certain sommet w, suivie d'un pas de w à v. Le nombre de ces marches est donc la somme sur tous les w de (marches de longueur k - 1 de u à w) fois A[w][v], ce qui est exactement le coefficient de Ak-1 fois A. Une récurrence sur k fait le reste.

À gauche : la matrice d'adjacence 6 sur 6 de la bande, lignes et colonnes de A à F. À droite : son cube, avec le coefficient de la ligne A, colonne F, égal à 3, mis en évidence, et les trois marches de longueur 3 de A à F énumérées à côté : A, B, D, F ; A, C, D, F ; et A, C, E, F. La diagonale du cube a pour somme 24, six fois les 4 triangles.
Le cube de la matrice d'adjacence compte les marches de longueur 3. Son coefficient pour A et F vaut 3, et sa diagonale compte chaque triangle six fois.

La bande illustre plusieurs conséquences à la fois :

def graph(edges):
    adj = {}
    for u, v in edges:
        adj.setdefault(u, set()).add(v)
        adj.setdefault(v, set()).add(u)
    return adj

def matmul(X, Y):
    return [[sum(x * y for x, y in zip(row, col)) for col in zip(*Y)] for row in X]

def walk_counts(adj, order, k):
    """Le coefficient [i][j] de la puissance k-ième de la matrice d'adjacence compte les marches de longueur k."""
    A = [[int(v in adj[u]) for v in order] for u in order]
    M = A
    for _ in range(k - 1):
        M = matmul(M, A)
    return M

strip = graph(['AB', 'AC', 'BC', 'BD', 'CD', 'CE', 'DE', 'DF', 'EF'])
order = 'ABCDEF'
for k in range(1, 7):
    M = walk_counts(strip, order, k)
    print(f'length {k}:  A to F {M[0][5]:3}   A back to A {M[0][0]:3}')
# length 1:  A to F   0   A back to A   0
# length 2:  A to F   0   A back to A   2
# length 3:  A to F   3   A back to A   2
# length 4:  A to F   6   A back to A  11
# length 5:  A to F  29   A back to A  24
# length 6:  A to F  78   A back to A  92
A3 = walk_counts(strip, order, 3)
print('triangles:', sum(A3[i][i] for i in range(len(order))) // 6)
# triangles: 4

Le nombre de marches de A à F croît rapidement avec la longueur, de 3 à 78 en trois pas, et pourtant le calcul reste peu coûteux. Chaque multiplication de deux matrices n sur n demande environ n3 opérations, et l'élévation au carré répétée atteint Ak en environ log2 k multiplications, si bien que même les marches de longueur un million peuvent être comptées exactement en quelques dizaines de produits de matrices. La somme de la diagonale de Ak est aussi la somme des valeurs propres de la matrice élevées à la puissance k, et c'est là que les marches rejoignent la théorie spectrale des graphes : la plus grande valeur propre fixe le taux de croissance du nombre de longues marches.

7. Les marches sont faciles, les chemins sont difficiles

L'astuce matricielle n'a pas d'équivalent pour les chemins. Le nombre de chemins entre deux sommets est, en général, difficile à calculer : Leslie Valiant a prouvé en 1979 que compter les chemins entre deux sommets donnés est #P-complet, l'analogue de NP-complet pour les problèmes de comptage. On ne connaît aucune méthode nettement meilleure que l'essai des parcours un par un, et l'on ne s'attend pas à en trouver une. Le programme ci-dessous compte les chemins exactement par ce genre de recherche, et compte les pistes de la même façon, avec les arêtes à la place des sommets.

def graph(edges):
    adj = {}
    for u, v in edges:
        adj.setdefault(u, set()).add(v)
        adj.setdefault(v, set()).add(u)
    return adj

def count_paths(adj, s, t, seen=None):
    """Nombre de chemins de s à t : essayer chaque voisin non visité, puis annuler."""
    if s == t:
        return 1
    seen = seen or {s}
    total = 0
    for w in adj[s] - seen:
        seen.add(w)
        total += count_paths(adj, w, t, seen)
        seen.remove(w)
    return total

def count_trails(adj, s, t, used=None):
    """Nombre de pistes de s à t. Une piste peut passer par t et y revenir plus tard."""
    used = used or set()
    total = 1 if s == t else 0
    for w in adj[s]:
        e = frozenset((s, w))
        if e not in used:
            used.add(e)
            total += count_trails(adj, w, t, used)
            used.remove(e)
    return total

strip = graph(['AB', 'AC', 'BC', 'BD', 'CD', 'CE', 'DE', 'DF', 'EF'])
print(count_paths(strip, 'A', 'F'), count_trails(strip, 'A', 'F'))
# 13 23

def grid(n):
    """La grille de rues n sur n : sommets (ligne, colonne), arêtes vers la droite et vers le bas."""
    return graph([((r, c), (r, c + 1)) for r in range(n) for c in range(n - 1)] +
                 [((r, c), (r + 1, c)) for r in range(n - 1) for c in range(n)])

for n in range(2, 6):
    print(n, count_paths(grid(n), (0, 0), (n - 1, n - 1)))
# 2 2
# 3 12
# 4 184
# 5 8512

Sur la bande, la recherche confirme les décomptes de la section 2 : 13 chemins et 23 pistes de A à F. La grille montre à quelle vitesse les nombres explosent. Entre les coins opposés d'une grille de rues ayant 2, 3, 4 et 5 sommets de côté, il y a 2, 12, 184 et 8 512 chemins, et une ligne et une colonne de plus donnent 1 262 816. Les physiciens et les chimistes appellent les chemins dans un réseau régulier des marches auto-évitantes et s'en servent comme modèles de chaînes de polymères, une molécule qui ne peut pas se traverser elle-même.

Le même écart sépare les questions faciles et difficiles sur un parcours unique :

8. Pistes, circuits et Euler

Les pistes appartiennent à Euler. Sa solution de 1736 au problème des ponts de Königsberg cherchait une marche traversant chaque pont exactement une fois : une piste passant par chaque arête d'un multigraphe. Une telle piste est une piste eulérienne, et une piste eulérienne fermée est un circuit eulérien. La condition d'Euler, démontrée complètement par Carl Hierholzer dans un article publié en 1873, porte sur les degrés. Un graphe connexe possède un circuit eulérien exactement lorsque chaque sommet est de degré pair, et une piste eulérienne non fermée exactement lorsque deux sommets, et deux seulement, sont de degré impair ; la piste doit alors commencer en l'un d'eux et se terminer en l'autre.

Dans la bande, B et E sont de degré 3 et tous les autres sommets sont de degré pair, donc une piste eulérienne va de B à E :

B, A, C, B, D, C, E, D, F, E        9 arêtes, chacune empruntée une fois

Elle passe par B, C, D et E deux fois chacun, ce qui explique pourquoi « chemin eulérien » est, à strictement parler, un nom impropre. Le guide des chemins et circuits eulériens présente l'algorithme de Hierholzer en détail. Quand un graphe a plus de deux sommets impairs, certaines arêtes doivent être parcourues deux fois, et trouver la marche fermée la moins coûteuse passant par chaque arête est le problème du postier chinois.

Le théorème de Veblen, vu à la section 5, est l'autre face de la même médaille. Un circuit eulérien est un circuit passant par chaque arête, et le couper en ses sommets répétés répartit les arêtes en cycles qui ne partagent aucune arête. Réciproquement, un graphe connexe dont les arêtes se répartissent en de tels cycles a tous ses degrés pairs, et les cycles peuvent être raccordés en leurs sommets communs pour former un seul circuit eulérien.

9. Cycles, maille et circonférence

La bande a exactement 10 cycles : les quatre triangles, trois cycles de longueur 4, deux de longueur 5 et un de longueur 6.

longueur 3 :  ABC, BCD, CDE, DEF
longueur 4 :  ABDC, BDEC, CDFE
longueur 5 :  ABDEC, BDFEC
longueur 6 :  ABDFEC

Deux nombres résument les cycles d'un graphe. La maille est la longueur d'un plus court cycle, ici 3, et la circonférence est la longueur d'un plus long cycle, ici 6. Un cycle passant par chaque sommet, comme A, B, D, F, E, C, A, est un cycle hamiltonien, donc la bande est hamiltonienne. Un graphe sans aucun cycle est une forêt, et une forêt connexe est un arbre, dans lequel il existe exactement un chemin entre deux sommets quelconques ; le guide des arbres développe cette idée. Le guide des cycles dans les graphes explique comment détecter un cycle par parcours en profondeur et combien de cycles indépendants possède un graphe.

10. Marches et chemins orientés

Dans un graphe orienté chaque pas doit suivre une flèche, de son origine vers son extrémité. Avec ce seul changement, les six définitions se transposent toutes : marche orientée, piste orientée, chemin orienté, marche fermée orientée, circuit orienté et cycle orienté. Quelques points se comportent différemment :

L'astuce matricielle de la section 6 fonctionne telle quelle pour les graphes orientés : le coefficient à la ligne u, colonne v de Ak compte les marches orientées de longueur k de u à v.

11. Où sert chaque type de parcours

Chacun des six mots désigne le bon modèle pour un type différent de problème réel :

12. Erreurs fréquentes

ErreurPourquoi c'est fauxCorrection
Appeler n'importe quel parcours un « chemin »Dans la plupart des ouvrages de théorie des graphes, un chemin ne répète aucun sommet ; certains ouvrages d'informatique emploient « chemin » (path) pour n'importe quelle marcheDites quelle définition vous utilisez, ou nommez la propriété
« Un chemin eulérien est un chemin »Il emprunte chaque arête une fois et revisite généralement des sommets, c'est donc une pisteDites « piste eulérienne » quand la précision compte
Traiter circuit et cycle comme synonymesA, B, C, D, E, C, A est un circuit mais passe par C deux foisUn cycle ne répète aucun sommet ; un circuit s'interdit seulement de répéter une arête
Appeler A, B, A un cycleIl emprunte deux fois la même arêteDans un graphe simple, un cycle a une longueur d'au moins 3
« Toute marche fermée contient un cycle »A, B, A est fermée et n'en contient aucunSeules les marches fermées de longueur impaire en contiennent un à coup sûr
Mesurer la longueur en sommetsA, C, D, F a 4 sommets mais une longueur de 3La longueur compte les pas, c'est-à-dire les arêtes
Lire Ak comme un nombre de cheminsA5[A][F] = 29, mais seulement 4 chemins de longueur 5 vont de A à FLes puissances de matrices comptent les marches ; les chemins exigent une recherche
Compter chaque cycle une fois par écritureUn cycle de longueur k a 2k écrituresDivisez par 2k, ou fixez le départ et le sens

13. Glossaire

TermeSignification
MarcheUne suite de sommets, chacun relié au suivant par une arête ; tout peut se répéter
LongueurLe nombre de pas d'une marche, chaque arête répétée étant comptée à chaque passage
PisteUne marche sans arête répétée
CheminUne marche sans sommet répété
Marche ferméeUne marche qui se termine à son sommet de départ
CircuitUne piste fermée : retour au départ, aucune arête répétée
CycleUne marche fermée de longueur au moins 3 sans sommet répété, sauf le départ
Marche trivialeUn sommet seul : une marche et un chemin de longueur 0
DistanceLa longueur d'un plus court chemin entre deux sommets
MailleLa longueur d'un plus court cycle
CirconférenceLa longueur d'un plus long cycle
Piste eulérienneUne piste qui emprunte chaque arête exactement une fois
Chemin hamiltonienUn chemin qui visite chaque sommet exactement une fois
Marche aléatoireUne marche qui se déplace à chaque pas vers un voisin choisi au hasard
Marche auto-évitanteLe nom que donnent les physiciens à un chemin dans un réseau régulier

14. Questions fréquentes

Quelle est la différence entre une marche, une piste et un chemin ?

Une marche est une suite quelconque de sommets reliés par des arêtes, et elle peut répéter à la fois des sommets et des arêtes. Une piste est une marche qui n'emprunte jamais deux fois la même arête, même si elle peut revisiter un sommet. Un chemin est une marche qui ne visite jamais deux fois le même sommet, donc il ne répète aucune arête non plus. Tout chemin est une piste et toute piste est une marche.

Quelle est la différence entre un circuit et un cycle ?

Les deux sont fermés : ils se terminent au sommet où ils ont commencé. Un circuit est une piste fermée : il ne répète donc jamais une arête mais peut passer plus d'une fois par un sommet. Un cycle ne répète aucun sommet, si ce n'est qu'il revient au départ, et dans un graphe simple il a une longueur d'au moins 3. Tout cycle est un circuit, mais un parcours en huit qui passe deux fois par un même sommet est un circuit et non un cycle. Certains livres emploient les deux mots comme synonymes, vérifiez donc la définition utilisée.

Un chemin eulérien est-il vraiment un chemin ?

Pas au sens strict. Un chemin eulérien emprunte chaque arête d'un graphe exactement une fois et passe généralement plusieurs fois par certains sommets ; c'est donc une piste plutôt qu'un chemin. C'est pourquoi de nombreux auteurs préfèrent le nom de piste eulérienne. Un chemin hamiltonien, qui visite chaque sommet exactement une fois, est bien un chemin.

Pourquoi les manuels définissent-ils le chemin différemment ?

Le vocabulaire de la théorie des graphes n'a jamais été entièrement normalisé. La plupart des livres de théorie des graphes depuis les années 1960, comme ceux de Harary, West, Bondy et Murty, et Diestel, emploient walk (marche) pour un parcours qui peut tout répéter et path (chemin) pour un parcours qui ne répète aucun sommet. Le manuel de Rosen, Discrete Mathematics and Its Applications, emploie path pour n'importe quelle marche et simple path pour un parcours sans arête répétée. Vérifiez toujours la définition au début du livre ou de l'article.

Comment compter les marches de longueur k entre deux sommets ?

Élevez la matrice d'adjacence A à la puissance k. Le coefficient à la ligne u et à la colonne v de A puissance k est le nombre de marches de longueur k de u à v. La diagonale de A au carré donne les degrés, et la somme de la diagonale de A au cube, divisée par 6, est le nombre de triangles. On ne connaît aucun raccourci de ce genre pour compter les chemins, un problème dont Valiant a prouvé en 1979 qu'il est #P-complet.

Un sommet seul est-il un chemin ?

Oui. Un sommet seul est une marche de longueur 0, et comme rien ne s'y répète, c'est aussi un chemin de longueur 0, appelé chemin trivial. Ce n'est pas un cycle, car un cycle dans un graphe simple exige au moins 3 arêtes.

15. Références

Les définitions, théorèmes et attributions ci-dessus proviennent de ces sources, classées par ordre chronologique.

  1. Euler, L. (1741). "Solutio problematis ad geometriam situs pertinentis." Commentarii Academiae Scientiarum Petropolitanae 8, 128 à 140. Présenté en 1736.
  2. Hierholzer, C. (1873). "Ueber die Möglichkeit, einen Linienzug ohne Wiederholung und ohne Unterbrechung zu umfahren." Mathematische Annalen 6, 30 à 32.
  3. Veblen, O. (1912). "An Application of Modular Equations in Analysis Situs." Annals of Mathematics, 2e série, 14, 86 à 94.
  4. Kőnig, D. (1916). "Über Graphen und ihre Anwendung auf Determinantentheorie und Mengenlehre." Mathematische Annalen 77, 453 à 465.
  5. Pólya, G. (1921). "Über eine Aufgabe der Wahrscheinlichkeitsrechnung betreffend die Irrfahrt im Straßennetz." Mathematische Annalen 84, 149 à 160.
  6. Berge, C. (1958). Théorie des graphes et ses applications. Paris : Dunod.
  7. Ore, O. (1962). Theory of Graphs. American Mathematical Society Colloquium Publications 38. Providence, RI : American Mathematical Society.
  8. Harary, F. (1969). Graph Theory. Reading, MA : Addison-Wesley.
  9. Garey, M. R. et Johnson, D. S. (1979). Computers and Intractability: A Guide to the Theory of NP-Completeness. San Francisco : W. H. Freeman.
  10. Valiant, L. G. (1979). "The Complexity of Enumeration and Reliability Problems." SIAM Journal on Computing 8(3), 410 à 421.
  11. Biggs, N. (1993). Algebraic Graph Theory, 2e édition. Cambridge : Cambridge University Press.
  12. Brin, S. et Page, L. (1998). "The Anatomy of a Large-Scale Hypertextual Web Search Engine." Computer Networks and ISDN Systems 30(1 à 7), 107 à 117.
  13. West, D. B. (2001). Introduction to Graph Theory, 2e édition. Upper Saddle River, NJ : Prentice Hall.
  14. Bondy, J. A. et Murty, U. S. R. (2008). Graph Theory. Graduate Texts in Mathematics 244. Londres : Springer.
  15. Chartrand, G. et Zhang, P. (2012). A First Course in Graph Theory. Mineola, NY : Dover.
  16. Rosen, K. H. (2012). Discrete Mathematics and Its Applications, 7e édition. New York : McGraw-Hill.
  17. Perozzi, B., Al-Rfou, R. et Skiena, S. (2014). "DeepWalk: Online Learning of Social Representations." Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 701 à 710.
  18. Diestel, R. (2017). Graph Theory, 5e édition. Graduate Texts in Mathematics 173. Berlin : Springer.

Trouvez vous-même la plus courte marche

Dessinez la bande de triangles dans le visualiseur et lancez un parcours en largeur depuis A. Il atteint F après 3 pas : la longueur de la plus courte marche, et donc du plus court chemin.

Ouvrir le visualiseur

Parcourez chaque arête une fois

Dessinez la bande de triangles et lancez l'outil de chemin eulérien. Il trouve une piste de B à E qui emprunte les neuf arêtes une fois chacune, en passant deux fois par quatre des sommets au passage.

Lancer le Visualiseur de Chemins Eulériens