Vous êtes sur la page 1sur 4

L3 INFO

Contrôle continu d’algorithmes sur les graphes


Novembre 2017
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) Un problème de frontières
Cinq pays A, B, C, D, E sont représentés par la carte suivante

A B C

D E

On veut savoir s’il est possible, en partant de l’un des cinq pays, de visiter tous les autres
pays en franchissant toutes les frontières avec la seule contrainte de ne jamais franchir deux
fois la même frontière.
Répondez à cette question en utilisant un graphe. Que faut-il chercher dans le graphe
que vous utilisez pour répondre à la question posée ?

Exercice 2 (4 pts) Jeu de Babylone


Le jeu de Babylone est un jeu à deux joueurs. Le plateau de jeu est constitué par quatre
piles composées par une seule brique : deux piles de briques jaunes et deux piles de briques
bleues. La configuration initiale peut se représenter par JJBB. Chaque joueur, à son tour,
doit fusionner exactement deux piles en les posant l’une sur l’autre. Il ne peut le faire que si
les deux piles sont composées du même nombre de briques ou que si les briques supérieures
de chaque pile sont de la même couleur. Le joueur qui ne peut plus jouer a perdu.
1. Dessinez le graphe G qui représente ce jeu.
2. Donnez la définition de noyau d’un graphe et calculez le noyau de G.
3. Utilisez le noyau de G pour déterminer une stratégie gagnante pour l’un des deux
joueurs.

Exercice 3 (4 pts) Roy-Warshall


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

 0 0  
 0 0 0 0 1 0 1 1 
 
 0 0 0 0 0 0 0 1 
0 0 1 0 0 0 0 0

1
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. Utiliser la matrice P pour repérer un chemin du sommet 1 au sommet 4. Expliquez
votre méthode.

Solution :
En exécutant l’algorithme de Roy-Warshall, on obtient les 2 matrices suivantes :
 
1 1 1 1 1 1 1 1
 0 1 1 1 0 0 1 1 
 
 0 1 1 1 0 0 1 1 
 
 0 1 1 1 0 0 1 1 
(8]
R =  

 0 1 1 1 1 0 1 1 
 0 1 1 1 1 1 1 1 
 
 0 1 1 1 0 0 1 1 
0 1 1 1 0 0 1 1
 
1 1 8 3 1 1 2 7
 0 2 8 3 0 0 2 7 
 
 0 3 3 3 0 0 3 7 
 
 0 3 8 4 0 0 0 4 
P (8) =



 0 5 8 3 5 0 2 7 
 0 5 8 3 6 6 6 6 
 
 0 3 8 3 0 0 7 7 
0 3 8 3 0 0 3 8
On obtient le chemin de 1 vers 4 en utilisant la première ligne de la matrice P (8) :
(1, 2, 7, 8, 3, 4)

Exercice 4 (5 pts) Graphe dual


Soit G un graphe orienté. Le graphe dual de G est le graphe orienté H dont les sommets sont
les arcs de G et un couple (α, β) d’arcs de G est un arc de H si et seulement si l’extrémité
finale de α est l’extrémité initiale de β.
Pour construire le graphe dual d’un graphe orienté G, il faut numéroter les arcs de G. Nous
supposerons que les arcs de G soient numérotés en utilisant l’ordre alphabétique sur les
couples de sommets (i, j) de G.
Répondez aux questions suivantes :

1. Soit G le graphe orienté dont ensemble des sommets est S = {1, . . . , 5} et l’ensemble
d’arcs est A = {(1, 2), (2, 1), (2, 4), (3, 5), (4, 1), (4, 3), (4, 5)}. Après avoir numéroté les arcs
de G avec les entiers de 1 à 7, donnez l’ensemble des sommets et l’ensemble des arcs du
graphe dual H de G.

2. Soit N la matrice de taille 5 × 5 définie par N [i, j] =nombre de l’arc (i, j) de G. Donnez
la matrice N .

Soit GrapheMD la structure des données suivante, qui permet de représenter un graphe

2
par sa matrice d’adjacence en mémorisant son nombre de sommets et son nombre d’arcs.

T ype GrapheM D = Enregistrement


n : Entier;
m : Entier;
M : T ableau[1..n, 1..n] de Booléen
F in;

3. Écrire une procédure Numarcs qui prend en entrée un graphe orienté G de type GrapheMD
et donne en sortie la matrice N de dimension G.n × G.n définie par N [i, j] =nombre de l’arc
(i, j) de G.

4. Écrire une procédure CalculDual qui prend en entrée un graphe orienté G de type
GrapheMD et qui donne en sortie le graphe dual H de G de type GrapheMD.

Solution :
1. H = (S, A) où S = {1, cdots, 7}, A = {(1, 2), (1, 3), (2, 1), (3, 5), (3, 6), (3, 7), (5, 1), (6, 4)}
2.  
0 1 0 0 0
 2 0 0 3 0 
 
N =  0 0 0 0 4 

 5 0 0 6 7 
0 0 0 0 0
3.
Procédure Numarcs(G : GrapheMD; var N : Tableau[1 . . . n] d’Entier);
Var i, j, k : Entier;
Début
k ← 1;
Pour i de 1 à G.n faire
Début
Si G.M [i, j] alors
Début
N [i, k] ← k;
k ← k + 1;
Finsi
Sinon
N [i, k] ← 0;
Finprocédure
4.
Procédure GrapheDual(G : GrapheMD; var H : GrapheMD);
Var i, j, k, l : Entier; N : Tableau[1 . . . n] d’Entier;
Début
Numarcs(G, N );
N.n ← G.m;
Pour i de 1 à H.n faire
Pour j de 1 à H.n faire
H.M [i, j] ← 0;
k ← 0;
Pour i de 1 à G.n faire
Pour j de 1 à G.n faire

3
Si G.M [i, j] alors
Pour l de 1 à G.n faire
Si G.M [j, l] alors
Début
H.M [N [i, j], N [j, l], k] ← k;
k ← k + 1;
Finsi
H.m ← k;
Finprocédure

Exercice 5 (4 pts) Plus courts chemins


Soit G le graphe orienté suivant, donné par sa matrice des poids :
 
∞ 3 4 ∞ ∞ ∞ ∞ ∞
 2 ∞ ∞ 15 9 5 ∞ ∞ 
 
 ∞ ∞ ∞ ∞ 4 ∞ ∞ ∞ 
 
 ∞ 4 ∞ ∞ ∞ 3 1 ∞ 
M =  3 ∞ 1


 7 ∞ ∞ ∞ ∞ 
 ∞ ∞ ∞ ∞ ∞ ∞ 3 ∞ 
 
 ∞ ∞ ∞ 5 6 ∞ ∞ ∞ 
∞ ∞ 2 ∞ ∞ 12 13 ∞

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 6 7 8
d
π
O
F

En exécutant l’agorithme de Dijkstra dans toutes ses étapes, on obtient les tableaux suivants
:

1 2 3 4 5 6 7 8
d 0 3 4 15 8 8 11 ∞
π 0 1 1 5 3 2 6 ∞
O V V V V V V V F
F V V V V V V V F

Vous aimerez peut-être aussi