2021 2022 Graphe TD4 CheminEulerienHamiltonien

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

L3 ESR Année 2021-2022

TD Graphes feuille n◦ 4

Cheminement eulérien et hamiltonien

1 Chemins eulériens
Définition 1. Soit G un graphe non orienté. Une chaı̂ne (resp. un cycle) eulérienne est une chaı̂ne (resp. un
cycle) qui passe une et une seule fois par toutes les arêtes de G.
On définit les mêmes notions pour un graphe orienté G : un chemin (resp. un circuit eulérien) est un chemin
(resp. un circuit) passant une et une seule fois par tous les arcs de G.
Exemple 1. Le graphe G1 admet une chaı̂ne eulérienne mais pas de cycle eulérien. Le graphe G2 admet un
chemin eulérien mais pas un circuit.

G1 G2

Théorème 1 Caractérisation des graphes eulériens


Soit G = (S, A) un graphe non orienté connexe. Il admet un cycle eulérien si et seulement si d(s) est pair
pour tout s ∈ S.
Si seulement deux sommets ne vérifient pas les conditions précédentes alors G admet une chaı̂ne
Eulériene.

Exercice 1. 1. Monter qu’un graphe admettant un cycle eulérien a tout ses sommets de degré pair.
2. Considérons l’algorithme suivant :

Algorithm 1: Algorithme de marquage pour trouver un cycle


Data: Un graphe G = (S, E)
Result: Une liste de sommet qui forme un cycle

l ← ();
s ← un sommet quelconque de S;
s0 ← un sommet inexistant;
while s n’est pas dans l do
mettre s dans l;
s00 ← s;
s ← choisir un voisin de s différent de s0 ;
s0 ← s00 ;
Effacer les sommets placer dans la liste avant s;

Montrer que si tous les sommets de G sont de degré plus grand ou égal à 2 alors l’algorithme précédent
termine sans problème (la troisième ligne de la boucle while n’est pas vérifié pour tout graphe). En
déduire que tout graphe dont tous les sommets sont de degré supérieur ou égal à 2 possède au moins
un cycle.
3. Montrer que si G admet un cycle C et que le graphe G − C admet un cycle eulérien alors G admet un
cycle eulérien. On rappelle que G − C est le graphe obtenu à partir de G en supprimant le cycle C.
4. Montrer par récurrence sur le nombre d’arêtes que tout graphe connexe dont les degrés de chaque
sommet est pair admet un cycle eulérien.
5. Montrer que si un graphe connexe a tout ses sommets de degré pair sauf deux alors le graphe admet
une chaı̂ne eulérienne.
6. Parmis les graphes suivants, lesquels admettent un cycle eulérien. Combien d’arêtes faut il rajouter au
minimum pour obtenir un cycle eulérien ?

7. Donner un algorithme pour déterminer si un graphe admet un cycle ou une chaı̂ne eulérienne.

Exercice 2 - Fil de fer. On dispose d’un fil de fer de 120cm. Est-il possible de préparer une carcasse de cube de
10 cm d’arête sans couper le fil ? Sinon, combien de fois au minimun faut-il couper le fil de fer ?
Exercice 3 - Craquage de digicode. L’accès d’un bâtiment est contrôlé par un digicode dont la combinaison
est formée d’une suite de 4 lettres x1 x2 x3 x4 , appelé mot, ne pouvant prendre que 2 valeurs xi = 0 ou 1. Pour
entrer, sans connaı̂tre le code, il faut normalement tenter chacune des combinaisons possibles (1111, 1110, . . . ).
Nous allons voir qu’il est possible d’entrer avec bien moins de tentatives.
En effet lorsqu’on saisit une chaı̂ne de p lettres x1 x2 x3 . . . x p le digicode teste successivement les sous-
chaı̂nes x1 x2 x3 x4 , x2 x3 x4 x5 ,. . . , x p−3 x p−2 x p−1 x p (par exemple taper 111001 revient à tester 1110, 1100, 1001).
Pour trouver la chaı̂ne la plus courte possible permettant d’entrer dans le bâtiment sans connaı̂tre le code, on
représente le problème par un graphe orienté G dont :
— les sommets représentent les mots de trois lettres x1 x2 x3 ;
— on a un arc du sommet x1 x2 x3 à y1 y2 y3 si x2 x3 = y1 y2 successivement par ajout d’une lettre à la fin
de la combinaison précédente, par exemple en ajoutant 0 à la fin de 111 on obtient une nouvelle chaı̂ne
1110 donc on aura un arc : 111 → 110.
1. Quel est le nombre de sommet du graphe ? Quel sont les degrés entrant et sortant de chaque sommet ?
En déduire le nombre d’arcs et si le graphe est eulérien.
2. Donner une représentation planaire du graphe G.
3. On cherche un suite de 0 et de 1 dans laquelle chaque suite de 4 caractères apparaı̂t exactement une fois.
Que doit vérifier le chemin associé et en déduire une suite de longueur minimale ayant cette propriété.
4. Quel est la longueur minimale lorsque le code est un mot de longueur d sur un alphabet à n symboles ?

2 Chemin hamiltonien
Définition 2. Soit G un graphe non orienté. Un cycle (resp. une chaı̂ne) hamiltonien est un cycle (resp. une
chaı̂ne) qui passe une et une seule fois par tous les sommets de G.
Les mêmes notions peuvent être définis pour un graphe orienté : un circuit ou un chemin hamiltonien est
un circuit ou un chemin passant une et une seule fois par tous les sommets de G.
Un graphe est hamiltonien s’il admet un cycle hamiltonien.
Exemple 2. G1 admet un circuit hamiltonien, G2 n’admet ni chaı̂ne ni cycle hamiltoniens, G3 admet une chaı̂ne
hamiltonienne mais pas de cycles hamiltoniens et G4 admet un cycle hamiltonien.

G1 G2 G3 G4
On ne connaı̂t pas de condition nécessaire et suffisante exploitable dans la pratique pour décider si un
graphe est hamiltonien ou non. De manière générale, la recherche de cycle, chaı̂ne, circuit ou chemin Hamilto-
nien est un problème algorithmiquement difficile. En fait, on peut montrer que c’est un problème NP-complet.
Proposition 2
Soit G = (S, A) un graphe simple non orienté. S’il existe X ⊂ S tel que | X | est strictement plus petit que le
nombre de composante connexe de G − X alors G n’a pas de cycle Hamiltonien.

Exemple 3. On peut utiliser ce théorème pour montrer que le graphe suivant n’a pas de cycle hamiltonien.

Exercice 4 - Condition nécessaire pour être Hamiltonien. Pour montrer la proposition précédente, on considère
un graphe simple non orienté G = (S, A) qui admet un cycle Hamiltonien C. Soit X ⊂ S, montrer que G \ X
admet au plus | X | composantes connexes.
Proposition 3
Soit G = (S, A) un graphe simple non orienté. Si pour toute paire de sommets non adjacent u, v ∈ S on a
d(u) + d(v) ≥ |S| alors G admet un cycle hamiltonien.

Corollaire 4
Soit G = (S, A) un graphe simple non orienté. Si pour toute paire de sommets non adjacent u, v ∈ S on a
d(u) + d(v) ≥ |S| − 1 alors G admet une chaı̂ne hamiltonienne.

Exercice 5 - Condition suffisante pour être Hamiltonien. Soit G = (S, A) un graphe simple non orienté et on
pose n = |S|.
1. Quel est le nombre maximal d’arêtes que peut avoir G.
2. Supposons que pour toute paire de sommets u, v ∈ S on a d(u) + d(v) ≥ n. En utilisant une récurrence
sur t = t = Cn2 − | A|, montrer que G admet un cycle Hamiltonien.
3. En déduire que si G vérifie que pour toute paire de sommets u, v ∈ V, on a d(u) + d(v) ≥ n − 1 alors
G admet une chaı̂ne Hamiltonienne (indication : ajouter un sommet annexe à G et le relier à tous les
sommets de G).
4. Le roi Arthur fait s’asseoir ses 2n chevaliers autour de la Table Ronde. Chacun des chevaliers possède
au plus n − 1 ennemis parmi les autres chevaliers. Prouver que Merlin l’Enchanteur peut trouver un
arrangement des 2n chevaliers de sorte qu’aucun ne soit assis à côté d’un de ses ennemis (bien sûr,
l’animosité est réciproque, et seuls les chevaliers s’assoient autour de la table).

Exercice 6 - Réunions dans un club. 1. Un club de 9 personnes se réunit chaque jour autour d’une table
ronde. Combien de jours peuvent-ils se réunir si l’on souhaite que personne n’ait deux fois le même
voisin ?
2. Généraliser la question précédentes au cas où le club à n personnes.
3. Le club de 9 personnes à cette fois deux tables, l’une de 4 places, l’autre de 5. Combien y a t’il de jours
de réunion possibles ? Et avec trois tables de 3 places ?

Exercice 7. Vingt équipes de football participent à un tournoi. Le premier jour, chacune dispute un match.
Le second jour, chaque équipe joue un autre match, contre une équipe différente de celle de la veille. Prouver
qu’après ce second jour, il est possible de trouver un groupe de 10 équipes dont deux quelconques ne se sont
pas encore rencontrées.
L3 ESR Année 2021-2022
TD Graphes feuille n◦ 4

Cheminement eulérien et hamiltonien (Solutions)

Correction 1 1. Soit G = (S, A) un graphe connexe. Pour qu’il admette un cycle Eulérien il faut qu’en
chaque sommet lorsqu’on arrive par une arête on puisse repartir par un autre arête. On obtient donc
que d(s) est pair si le graphe est orienté pour chaque sommet s ∈ S.
2. L’algorithme proposé est un algorithme de marquage, chaque sommet visité étant placé dans la liste l .
Initialement tous les sommets sont non marqués. Un sommet s1 est marqué arbitrairement. L’algorithme
construit alors une séquence s1 , . . . , sk de sommets marqués en choisissant arbitrairement pour si+1
un sommet non marqué adjacent à si . L’algorithme s’arrête lorsque sk ne possède plus de voisin non
marqué. Puisque ce sommet est de degré au moins 2, il possède un voisin s j 6= sk−1 dans la séquence,
j < k − 1. On en déduit que (sk , s j , s j+1 , . . . , sk−1 , sk ) est un cycle.
3. Supposons que G admet un cycle C = (s0 , . . . , sk , s0 ) et que G − C admet un cycle Eulérien noté C 0 =
(s00 , s10 , . . . , s0n , s00 ). Comme G est connexe, il existe i ∈ J1, kK tel que le sommet si soit dans C 0 . On peut
supposer que si est s00 . Ainsi on peut considérer le cycle (si , si+1 , . . . , si−1 , si = s00 , s10 , . . . s0n , s00 ), il passe
une et une seule fois par toutes les arêtes de C et une et une seule fois par toutes les arêtes de G − C. On
en déduit que c’est un chemin eulérien de G.
4. On démontre par récurrence sur le nombre d’arcs que pour un graphe connexe G, si chaque sommet
s ∈ S est de degré pair alors G admet un cycle eulérien.
Initialisation : Si | A| = 0, on a un graphe connexe sans arêtes, c’est à dire un seul sommet isolé qui admet
un cycle eulérien.
Induction : On suppose que le théorème est vrai pour tout graphe ayant un nombre d’arêtes inférieur
ou égal à n (hypothèse de récurrence forte). Soit G = (S, A) un graphe connexe tel que | A| = n + 1 et
pour chaque sommet s ∈ S est de degré pair. Comme le graphe est connexe et que le degré de chaque
sommet est pair, on en déduit que G admet un cycle élémentaire C = (s1 , s2 , . . . , sk , s1 ).
Soit G 0 le sous-graphe de G auquel on a supprimé les arêtes de C. Le graphe G 0 n’est pas forcément
connexe mais vérifie d(s) pairs pour chacun de ses sommet s. On applique l’hypothèse de récurrence sur
chacune de ses composantes qui admettent donc des cycles eulériens. On combine alors ces différents
cycles eulériens avec le cycle C, pour former un cycle eulérien sur G de la façon suivante : on parcourt C
depuis un sommet initial arbitraire et, à chaque fois que l’on rencontre une des composantes connexes
de G 0 pour la première fois, on insère le cycle eulérien considéré sur cette composante. S’agissant d’un
cycle, on est assuré de pouvoir poursuivre le parcours de C après ce détour. Il est facile de vérifier qu’on
a ainsi bien construit un cycle eulérien sur G.
5. Si G admet une chaı̂ne Eulérienne et admet un sommet de degré impair, soit c’est le point de départ de
la chaı̂ne, soit il arrive un moment où l’on ne pourra plus repartir ce qui constitue le sommet terminal de
la chaı̂ne. Ainsi, si seulement deux sommets sont de degré impair il peuvent servir de point de départ
et d’arrivé d’un chemin passant par tous les arêtes du graphe, le graphe peut donc admettre une chaı̂ne
Eulérienne.
6. Il faut compter les degrés des sommets : Si tous les degrés sont pairs le graphe admet un cycle eulérien.
Avec deux sommets impairs seulement il admet un chemin eulérien.
7. La preuve donne l’algorithme suivant :

Correction 3

Correction 4 Soit C un cycle Hamiltonien du graphe G. Alors pour tout ensemble de sommet X ⊂ S on a
comp(C − X ) ≥ comp( G − X ) puisque tout les sommet de X apparaissent dans C et G a plus d’arêtes que C.
De plus | X | ≥ comp(C − X ). En effet si | X | = 1 on a comp(C − X ) = 1 = | X |, ensuite, le retrait d’un
sommet dans une chaı̂ne laisse la chaı̂ne connexe s’il s’agit d’une extrémité ou bien le coupe en deux s’il s’agit
d’un sommet intérieur. Par récurrence on a | X | ≥ comp(C − X ).
On a donc | X | ≥ comp(C − X ) ≥ comp( G − X ).
Algorithm 2: Algorithme de recherche de cycle eulérien
Data: Un graphe G = (S, E)
Result: Une liste de sommet qui forme un cycle ou une chaı̂ne eulérienne

if G a deux sommets de degré impair then


écrire une chaı̂ne C joignant les deux sommets;
else
écrire un cycle C partant d’un sommet quelconque
while C ne contient pas toutes les arêtes de G do
pour chaque sommet de C remplacer si possible le sommet par un cycle de début ce sommet ne
contenant que des arêtes non prises dans C;

Correction 5 1. Le graphe simple a n sommet qui a le plus d’arête est le graphe complet Kn , le nombre
d’arête correspond au nombre de façon de choisir deux sommets parmi n de manière non ordonné et
sans remise. Il y a donc Cn2 possibilités.
2. On procède par induction sur t = Cn2 − | A| où n = |V |. Si t = 0 alors G est complet donc il a un cycle
Hamiltonien.
Si t > 0 on choisit deux sommets u, v non relié et on considère G 0 = G + {u, v}. Par induction G 0
admet un cycle hamiltonien C. Si {u, v} ∈ / C, alors c’est aussi un cycle hamiltonien de G. Sinon,
u = v1 , v2 . . . vn = v forme un chemin hamiltonien. Soit P = {i : vi et v1 adjacent} et Q = {i :
vi−1 et vn adjacent} respectivement les ensemble de sommets respectivement adjacent à u et v. On a
| P| + | Q| = d(u) + d(v) ≥ n. Comme P ∪ Q = {v2 , . . . , vn } on en déduit qu’il exist i tel que v1 adjacent
à vi et vn à vi−1 . On construit alors un cycle Hamiltonien.
/ V, alors on considère le graphe G 0 qui correspond au graphe G où on rajoute le sommet x et
3. Soit x ∈
toutes les arêtes entre x et tous les sommets de G. Soit u, v deux sommets de G non adjacent alors ils
sont dans V, on a dG0 (u) + dG0 (v) = dG (u) + dG (v) + 2 ≥ n + 1. Ainsi G 0 admet un cycle hamiltonien C
et C − x sera une chaı̂ne hamiltonienne de G.
4. Il suffit de montrer qu’un graphe simple de k ≥ 3 sommets, chacun de degré supérieur ou égal à 2k , est
hamiltonien. C’est une conséquence de la deuxième question.

Correction 6 1. Considérons le graphe complet K9 à 9 sommets. Une composition de la table correspond


à un cycle hamiltonien de K9 . Si deux compositions de table correspondent à deux cycles ayant une
arête commune, cela signifie que les deux personnes reliées par cette arête se retrouvent côte à côte, le
problème revient donc à déterminer le nombre de cycles hamiltoniens disjoints de K9 .
Le graphe K9 possédant 9 × 8/2 = 36 arêtes. Chaque cycle utilisant 9 arêtes, le nombre de cycle ha-
miltonien disjoint est au maximum égal à 4. Il vaut effectivement 4, comme le prouvent les 4 cycles
hamiltoniens disjoints suivants :

1, 2, 3, 9, 4, 8, 5, 7, 6 1, 3, 4, 2, 5, 9, 6, 8, 7 1, 4, 5, 3, 6, 1, 7, 9, 8 1, 5, 6, 4, 7, 2, 8, 1, 9

2. En règle générale, k solutions sont possibles pour un graphe à n = 2k + 1 ou n = 2k + 2 sommets.


Le même argument que précédemment donne cette valeur maximale, pour trouver une solution il faut
construire les différents cycles hamiltoniens. Pour cela, on regarde les cycles de la forme ({i, i + j})i∈[1,n]
avec j ∈ [1, k ].
3. Il s’agit toujours de décomposer le graphe complet en ensembles disjoints de 9 arêtes, mais cette fois,
chaque ensemble doit correspondre à un cycle de 4 arêtes et un cycle de 5 arêtes. Avec trois tables
de 3, chaque ensemble doit correspondre à trois tirangles. Le nombre maximum de solutions discuté
précédemment reste donc valable dans ces deux situations : nous aurons au plus 36 / 9 = 4 solutions.
Là encore, on peut trouver 4 solutions :
— une table de 4 et une table de 5 :

(1, 2, 3, 4)(5, 6, 7, 8, 9) (2, 4, 6, 8)(1, 3, 5, 7, 9) (...) (...)

— trois tables de 3 :

(1, 2, 3)(4, 5, 6)(7, 8, 9) (1, 4, 7)(2, 5, 8)(3, 6, 9) (1, 5, 9)(2, 6, 7)(3, 4, 8) (1, 6, 8)(2, 4, 9)(3, 5, 7)
Pour chacune des situations de cet exercice, plusieurs solutions sont possibles.

Correction 7 On construit un graphe G dont les sommets sont les 20 équipes, en reliant deux sommets par
une arête rouge si et seulement s’ils correspondent à deux équipes qui se sont affrontées le premier jour, et
par une arête verte pour le second jour. Ainsi, chaque sommet est l’extrémité d’exactement une arête rouge et
une arête verte, et donc a pour degré 2. Dans chaque composante connexe, en partant d’un sommet arbitraire,
et en suivant alternativement une arête rouge et une arête verte, on parcourt ainsi un cycle eulérien, qui est
également un cyle hamiltonien. La bicoloration assure que ce cycle est de longueur paire. En choisissant un
sommet sur deux dans chacun de ces cycles, on obtient ainsi 10 sommets indépendants, qui représentent bien
10 équipes dont deux quelconques ne se sont pas encore affrontées.

Vous aimerez peut-être aussi