Vous êtes sur la page 1sur 3

Université de Rouen

L3 Informatique et Sciences des données


Algorithmique des graphes

Fiche de travaux dirigés n. 2

Structures des données pour la répresentation des graphes.

Les structures des données que nous utiliserons pour représenter un graphe orienté
ou non sont les suivantes :

• Par matrice d’adjacence

T ype GrapheM = Enregistrement


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

• Par listes de successeurs


T ype Cellule = Enregistrement
sommet : Entier;
suiv : ↑Cellule
F in;
T ype Acellule = ↑Cellule;
T ype GrapheT L = Enregistrement
n : Entier;
T : T ableau[1..n] de Acellule
F in;

Par liste d’arcs


T ype Arc = Enregistrement
sommetin : Entier;
sommetf in : Entier;
suiv : ↑Arc
F in;
GrapheLArc = Enregistrement
n : Entier;
m : Entier;
LA : ↑Arc
F in;

Exercice 1 Soit G un graphe orienté. Pour chacune des représentations de G, écrire


et calculer la complexité des primitives suivantes :
1. Fonction DegréExtérieur(G : Graphe; i : Entier) : Entier,
qui calcule le nombre d’arcs qui ont comme extremité initiale le sommet i.

2. Procédure AjoutArc(G : Graphe; i,j : Entier, Var G+ : Graphe),


qui calcule le graphe G+ obtenu à partir du graphe G en y ajoutant l’arc (i, j).
Exercice 2 Ecrire les procédures suivantes de passage d’une représentation à l’autre
d’un graphe orienté G :
1. Procédure DeMaTL, qui prend en entrée un graphe G donné par sa matrice
d’adjacence et fournit en sortie la représentation de G par listes de successeurs.
2. Procédure DeTLaM, qui prend en entrée un graphe G donné par ses listes de
successeurs et fournit en sortie sa matrice d’adjacence.
3. Procédure DeMaLArcs, qui prend en entrée un graphe G donné par sa matrice
d’adjacence et fournit en sortie la représentation de G par sa liste d’arcs.
4. Procédure DeLarcsaTL, qui prend en entrée un graphe G donné par sa liste
d’arcs et fournit en sortie la représentation de G par listes de successeurs.
Exercice 3 Soit G = ⟨S, A⟩ un graphe orienté sans circuits. Pour tout sommet x
de G, on note Succ(x) l’ensemble des successeurs de x. On dit que l’ensemble N ⊂ S
est un noyau de G s’il vérifie :
- Pour tout x ∈ N on a Succ(x) ∩ N = ∅.
- Pour tout x ∈
/ N on a Succ(x) ∩ N ̸= ∅.
1. Montrez que si un graphe orienté est sans circuit alors il possède au moins un
sommet sans successeur.
2. Les sommets de G sans successeur appartiennent-ils noyau de G ? Justifiez
votre réponse.
3. Montrez un graphe orienté sans circuits possède un seul noyau.
4. Déterminez, en justifiant votre raisonnement, le noyau du graphe suivant :
A B C D

E F G H

I J K L

M N P Q

2
5. Un graphe sans circuits G = ⟨S, A⟩ est donné à deux joueurs Max et Min. Max
est le joueur qui joue en premier. Un jeton est placé sur un sommet x0 de G.
Le joueur Max doit choisir un sommet x1 ∈ Succ(x0 ) et déplacer le jeton de
x0 vers x1 . Ensuite, Min doit choisir un sommet x2 ∈ Succ(x1 ) et déplacer le
jeton de x1 vers x2 . Le jeu continue ainsi jusqu’à ce le jeton se trouve sur un
sommet sans successeur. Le joueur qui ne peut plus jouer a perdu. Montrez
que, dans ce jeu, si un joueur a la possibilité de choisir, à chaque étape de la
partie, un sommet dans le noyau N , il possède une stratégie qui lui permet de
gagner la partie.

6. Montrez comment Max peut gagner la partie si, au début, le jeton est placé
sur le sommet B.

7. Montrez comment Min peut gagner la partie si, au début, le jeton est placé
sur le sommet A.

8. Proposez un algorithme permettant de calculer le noyau d’un graphe orienté


sans circuits.

Vous aimerez peut-être aussi