Vous êtes sur la page 1sur 5

L3 Informatique et Sciences des données

Contrôle continu d’Algorithmique 3-Graphes


23 Novembre 2020
La durée de l’épreuve est de 2 heures. Documents et portables ne sont pas autorisés. Il sera
tenu compte de la présentation et de la justification des résultats.

Exercice 1 (3 pts) Soit JD(n) un jeu de dominos sans doubles dont les dominos comportent
les chiffres de 0 à n. La question posée est de savoir s’il est toujours possible, et dans le
cas d’une réponse négative, sous quelles conditions, d’aligner tous les dominos de JD(n) en
suivant la règle du domino. Vous répondrez à cette question en modélisant ce problème avec
un graphe, dont vous préciserez s’il est orienté ou non et ses ensembles de sommets et d’arcs
ou arêtes, et en utilisant les propriétés de ce graphe.
Solution : On peut représenter JD(n) avec un graphe non orienté Gn = (Sn , An ) où
Sn = {0, 1, . . . , n} et An = {{i, j}|i, j ∈ Sn }.
Chaque domino est donc représenté par une arête de Gn . Dans Gn , chaque sommet i est
rélié à tous les autres sommets. Cela signifie que tout sommet de Gn a degré n. Savoir si
on peut alligner tous les dominos de JD(n) est équivalent à trouver une chaı̂ne eulérienne
dans Gn . Comme tous les sommets de Gn ont degré n, par le Théorème d’Euler, une chaı̂ne
eulérienne existe ssi n est pair.

Exercice 2 (3 pts) Deux joueurs, que nous appellerons Max (le joueur qui joue en premier)
et Min, jouent sur un graphe orienté G dont la liste des successeurs est la suivante :
1 : 2, 3, 4; 6 : 8, 9, 10;
2 : 5, 6, 8; 7 : 9, 10;
3 : 6, 7; 8 : 9;
4 : 5, 6, 7, 10; 9 : //;
5 : 8, 9; 10 : 9;

Un jeton est placé sur le sommet 1 du graphe. À tour de rôle, Max et Min déplacent le jeton
du sommet où il est placé vers l’un des ses successeurs. Le joueur qui ne peut plus jouer a
perdu. Répondez au question suivantes :
1. Donnez la définition de noyau N d’un graphe orienté.
2. Montrez qu’un graphe orienté sans circuits possède un noyau unique.
3. Calculez le noyau de G et utilisez-le pour déterminer une stratégie gagnante pour l’un
des deux joueurs.
Solution:
1. Le noyau N d’un graphe orienté G est défini par : tout sommet x ∈ N n’a pas
de successeurs dans N et tout sommet y qui n’appartient pas à N a au moins un
successeurs dans N .

1
2. Supposons par l’absurde que G possède deux noyaux N1 et N2 , avec N1 ̸= N2 . Les
sommets sans successeurs appartiennent à N1 ∩ N2 . Il existe donc un sommet x1
tel que x1 ∈ N1 et x1 ∈/ N2 . Comme x1 ∈ N1 , tous ses successeurs n’appartiennent
pas à N1 et, comme x1 ∈/ N2 , il existe au moins un successeur de x1 , disons x2 qui
appartient à N2 . Nous avons x2 ∈ / N1 et x2 ∈ N2 . En répétant ce rausonnement,
nous pouvons construire une suite de sommets {xi }i≥1 telle que xi ∈ N1 et xi ∈ / N2
et xi+1 ∈
/ N1 et xi+1 ∈ N2 . Comme l’ensemble des sommets de G est fini, ils existent
xk et xt tels que xk = xt , avec k ≤ t. Mais G ne possède pas de circuits, donc nous
avons que k = t et xk ne possède pas de successeurs. Donc xk ∈ N1 ∩ N2 ce qui est
impossible.
3. N = {2, 3, 4, 9}. Comme 1 ∈
/ N , Max possède une stratégie gagnante. Par exemple
celle donnée par :
1:3
3 : 6, 7
6:9
7:9

Exercice 3 (4 pts) Dans cet exercice, nous utiliserons la représentation suivante d’un
graphe orienté :
Type Cellule = Enregistrement
sommet : Entier;
suiv : ↑Cellule;
Fin;
GrapheTL = Enregistrement
n : entier;
L : Tableau[1..n] de ↑Cellule
Fin;
Soit G = (S, A) un graphe orienté. Le graphe inverse de G, noté G−1 , est défini par
G−1 = (S, A−1 ) où A−1 = {(x, y)|(y, x) ∈ A}. Répondez aux questions suivantes :
1. Écrivez la procédure DeGT LaG−1 T L qui prend en entrée un graphe orienté G de type
GrapheT L et qui donne en sortie le graphe G−1 de type GrapheT L. Vous définirez
toutes vos primitives. Calculez la complexité de votre procédure.
2. Écrivez la fonction N ombreP red qui prend en entrée un graphe orienté G de type
GrapheT L et un sommet i de G et qui donne en sortie le nombre de prédécesseurs de
i.
Solution: On notera Acellule le type ↑Cellule
1. Procédure DeGT LaG−1 T L(G : GrapheTL; Var G−1 : GrapheTL);
Var i, j : Entier; q : Cellule; p : Acellule;
Début
{Initialisation }
G−1 .n ← G.n;
Pour i de 1 à G−1 .n faire
G−1 .L[i] ← N ul
Pour i de 1 à G−1 .n faire
{Boucle principale }
Début
p ← G.L[i];

2
CréerCellule(i, q);
Tantque p ̸= N ul faire
Début
j ← p.sommet;
Ajouteràlafin(q, G−1 .L[j]);
p ← p ↑ .suiv;
Fintantque
Finpour
Finprocédure.

Il faut définir les priitives CréerCellule et Ajouteràlafin. Nous l’avons fait en TD.

La complexité est O(n + m)


2. Pour le deuxième algorithme, il suffit de remarquer que le nombre de prédécesseurs
de i dans G est le nombre de successeurs de i dans G−1 .

Function N ombreP red(G : GrapheTL; i : Entier);


Var i, d : Entier; G−1 : GrapheTL; p : Acellule;
Début
DeGT LaG−1 T L(G, G−1 );
p ← G−1 .L[i];
d ← 0;
Tantque p ̸= N ul faire
Début
d ← d + 1;
p ← p ↑ .suiv;
Fintantque
Retourner(d)
Finfonction.

Exercice 4 (5 pts) Soit G le graphe orienté suivant, donné par sa matrice d’adjacence :
 
0 0 1 0 0
 0 0 0 1 0 
 
M =  0 1 0 0 1 

 1 0 0 0 1 
0 0 0 0 0

1. Exécutez l’algorithme de Roy-Warshall, en déroulant toutes les étapes, pour calculer


la matrice d’accessibilité AC et la matrice P des prédécesseurs de G.
2. Utilisez la matrice P pour repérer un chemin du sommet 2 au sommet 5. Expliquez
votre méthode.

Solution : L’application de l’algorithme de Roy-Warshall donne les matrices suivantes :


   
1 0 1 0 0 1 0 1 0 0
 0 1 0 1 0   0 2 0 2 0 
  (0)  
R(0) =  0 1 1 0 1 P = 0
  3 3 0 3  
 1 0 0 1 1   4 0 0 4 4 
0 0 0 0 1 0 0 0 0 5

3
   
1 0 1 0 0 1 0 1 0 0
 0 1 0 1 0   0 2 0 2 0 
  (1)  
R (1)
=
 0 1 1 0 1 P = 0
 3 3 0 3 

 1 0 1 1 1   4 0 1 4 4 
0 0 0 0 1 0 0 0 0 5
   
1 0 1 0 0 1 0 1 0 0
 0 1 0 1 0   0 2 0 2 0 
  (2)  
R (2)
=
 0 1 1 1 1 P = 0
 3 3 2 3 

 1 0 1 1 1   4 0 1 4 4 
0 0 0 0 1 0 0 0 0 5
   
1 1 1 1 1 1 3 1 2 3
 0 1 0 1 0   0 2 0 2 0 
  (3)  
R(3) = 
 0 1 1 1 1 P = 0
 3 3 2 3 

 1 1 1 1 1   4 3 1 4 4 
 0 0 0 0 1   0 0 0 0 5 
1 1 1 1 1 1 3 1 2 3
 1 1 1 1 1   4 2 1 2 4 
  (4)  
R(4) = 
 1 1 1 1 1 P = 4
 3 3 2 3 

 1 1 1 1 1   4 3 1 4 4 
0 0 0 0 1 0 0 0 0 5
(5) (4) (5) (4)
R =R ,P =P

Pour répérer un chemin de 2 vers 5, on regarde la ligne 2 de la matrice P (5) , P (5) [2, 5] =
4, P (5) [2, 4] = 2. On obtient le chemin(2, 4, 5).

Exercice 5 (5 pts) Soit G le graphe orienté et valué suivant, donné par sa matrice des
distances :  
+∞ 2 1 4 +∞
 +∞ +∞ 5 1 6 
 
D=  +∞ +∞ +∞ +∞ 4  
 +∞ +∞ 1 +∞ 2 
+∞ +∞ +∞ +∞ +∞
Exécutez l’algorithme de Dijkstra sur le graphe G, en déroulant toutes les étapes, à partir du
sommet 1. Vous donnerez, à chaque étape de l’algorithme, le sommet choisi (sauf pour l’étape
d’initialisation), et pour chaque sommet x, la valeur de l’attribut d[x], le prédécesseur π(x)
sur un plus court chemin de 1 vers x et les valeurs O(x), F (x) qui indiquent respectivement
si le sommet x est ouvert et s’il est fermé, sous la forme suivante :
Sommet choisi:
1 2 3 4 5
d
π
O
F

Déssinez l’arborescence des plus courts chemins.

Solution : L’application de l’algorithme de Dijkstra donne le tableau suivant :

4
Initialisation
1 2 3 4 5
d 0 +∞ +∞ +∞ +∞
π 0 0 0 0 0
O V F F F F
F F F F F F

Sommet choisi 1
1 2 3 4 5
d 0 2 1 4 +∞
π 0 1 1 1 0
O V V V V F
F V F F F F

Sommet choisi 3
1 2 3 4 5
d 0 2 1 4 5
π 0 1 1 1 3
O V V V V V
F V F V F F

Sommet choisi 2
1 2 3 3 5
d 0 2 2 3 5
π 0 1 1 2 3
O V V V V V
F V V V F F

Sommet choisi 4
1 2 3 4 5
d 0 2 1 3 5
π 0 1 1 2 3
O V V V V V
F V V V V F

Sommet choisi 5
1 2 3 4 5
d 0 2 1 3 5
π 0 1 1 2 3
O V V V V V
F V V V V V

L’arborescence des plus courts chemins est donnée par

1 2 3 4 5
π 0 1 1 2 3

On peut la dessiner sous forme d’arborescence.

Vous aimerez peut-être aussi