En donnant un sens aux arêtes d'un graphe, on obtient un digraphe, ou graphe orienté.
Remarque : De l'anglais directed graph.
Définition (Digraphe, sommets, arcs)
Un digraphe fini $G = (V, E)$ est défini par :
Un arc $e$ de l'ensemble $E$ est défini par une paire ordonnée de sommets. Lorsque $e = (u, v)$, on dira que l'arc $e$ va de $u$ à $v$. On dit aussi que $u$ est l'extrémité initiale et $v$ l'extrémité finale de $e$.
Exemple : Un exemple de digraphe :
Exercice : Construire un graphe orienté dont les sommets sont les entiers compris entre 1 et 12 et dont les arcs représentent la relation « être diviseur de ».
Exercice : Quel est le nombre maximal d'arêtes dans un graphe orienté d'ordre $n$ qui ne possède pas d'arêtes parallèles ?
Soit $v$ un sommet d'un graphe orienté.
Définition (Degré extérieur)
Le degré extérieur du sommet $v$ est le nombre d'arcs ayant $v$ comme extrémité initiale.
Notation: On le note $d_+(v)$.
Définition (Degré intérieur)
Le degré intérieur du sommet $v$ est le nombre d'arcs ayant $v$ comme extrémité finale.
Notation: On le note $d_-(v)$.
Théorème
On a : $d(v) = d_+(v) + d_-(v)$.
Exercice : Soit $G$ un graphe orienté quelconque. Démontrez que la somme des degrés entrants de tous les sommets est égal à la somme de tous les degrés sortants.
Réponse : Chaque arête compte une fois dans la somme des degrés entrants et une fois dans la somme des degrés sortants... Exercice :
Exercice : Soit X un ensemble de lapins, et G un graphe orienté ayant X pour ensemble de sommets. On dit que G est un «graphe de parenté» si les arcs de G codent la relation «être l'enfant de...». Quelles conditions doit nécessairement vérifier G pour pouvoir être un graphe de parenté?
Définition (Chemin)
Un chemin conduisant du sommet $a$ au sommet $b$ est une suite de la forme ($v_0,e_1,v_1,e_2,v_2, ..., e_k,v_k$) où les $v_i$ sont des sommets ($v_0=a$ et $v_k=b$) et les $e_i$ sont des arcs tels que $e_i$ va de $v_{i-1}$ à $v_i$.
Exemple : Sur le digraphe ci-dessous, on peut voir par exemple le chemin ($v_3,e_3,v_4,e_4,v_5$).
Remarque : Par convention, tout chemin comporte au moins un arc.
Définition (Distance)
On appelle distance entre deux sommets d'un digraphe la longueur du plus petit chemin les reliant.
S'il n'existe pas de chemin entre les sommets $x$ et $y$, on pose $d(x,y) = +\infty$.
Exemple : Par exemple, sur le digraphe ci-dessus (exemple précédent), $d(v_1,v_5)=2$, $d(v_1,v_6)=1$, $d(v_6,v_1)=+\infty$.
Exercice : Donnez un algorithme permettant de calculer la distance entre deux sommets x et y d'un digraphe connexe.
Définition (Circuit)
Un circuit est un chemin avec $u_0=u_k$.
Exemple : Le digraphe ci-dessus ne contient pas de circuit.
Remarque : Les notions de longueur, de chemins et de circuits sont analogues à celles des chaînes et des cycles pour le cas non orienté.
Théorème
Dans le cas des graphes orientés, il y a équivalence entre :
Définition (Digraphe fortement connexe)
Un digraphe est fortement connexe, si toute paire ordonnée ($a$, $b$) de sommets distincts du graphe est reliée par au moins un chemin.
Remarque : En d'autres termes, tout sommet est atteignable depuis tous les autres sommets par au moins un chemin.
Exercice : Les graphes ci-dessous sont-il fortement connexes? Si non, donnez leurs composantes fortement connexes.
Définition (Composante fortement connexe)
On appelle composante fortement connexe tout sous-graphe induit maximal fortement connexe (maximal signifie qu'il n'y a pas de sous-graphe induit connexe plus grand contenant les sommets de la composante).
Exercice : On souhaite prélever 4 litres de liquide dans un tonneau. Pour cela, nous avons à notre disposition deux récipients (non gradués!), l'un de 5 litres, l'autre de 3 litres.
Comment doit-on procéder?
Exercice : Donnez un algorithme permettant de calculer la distance entre deux sommets x et y d'un digraphe connexe.
Exercice : Proposez un algorithme qui détermine si un graphe est fortement connexe ou non.
Indication : utilisez un système de marquage des sommets.
Exercice : Les graphes ci-dessous sont-il fortement connexes? Si non, donnez leurs composantes fortement connexes.
Définition (Matrice d'incidence entrante et sortante)
On suppose que les arêtes et les sommets ont été numérotés.
On appelle matrice d'incidence sortante $J^+$ la matrice dont l'élément $J^+(s,\varepsilon)$ vaut
On appelle de même matrice d'incidence entrante $J^-$ la matrice dont l'élément $(s,\varepsilon )$ vaut :
\begin{Def} On suppose à nouveau que les arêtes et les sommets du graphe orienté considéré ont été numérotées, et on appelle alors matrice d'incidence J de ce graphe la matrice dont l'élément $(s,\varepsilon)$ vaut :
Théorème
Soient $(s_1, , s_n)$ les sommets d'un graphe orienté. Alors
$
Définition (Matrice d'adjacences)
On peut représenter un digraphe par une matrice d'adjacences :
Voici la matrice d'adjacences du digraphe G:
$M = \left(\begin{array}{cccccc}0 & 1 & 0 & 1 & 0 & 1 \\0 & 0 & 0 & 1 & 1 & 0 \\0 & 0 & 0 & 1 & 0 & 0 \\0 & 0 & 0 & 0 & 1 & 0 \\0 & 0 & 0 & 0 & 0 & 0 \\0 & 1 & 0 & 0 & 0 & 0 \\\end{array}\right)$
Exercice : Décrivez le digraphe G ci-contre par une matrice d'adjacences.
Remarque : Se donner un graphe orienté revient à se donner sa matrice d'adjacence.
Théorème
La matrice d'adjacence à plusieurs caractéristiques :
Théorème (Nombre de chemins de longueur k)
$A^k(s,t)$, élément à la position $(s,t)$ de la puissance kième de A, est aussi le nombre de chemins de longueur k qui mènent de $s$ à $t$.
Théorème (Lien entre les matrices d'adjacence)
Soit A la matrice d'adjacence d'un graphe orienté, et B la matrice d'adjacence du graphe non orienté qui lui est associé. Alors $B = A+A^t$
Les remarques précedentes permettent de conclure que se donner ($J^+,J^-$) ou $A$, « c'est pareil ». Plus précisément, on a $J^{+}J^{-t} = A$
Exercice : On pose $A=\left( \begin{array}{cccc} 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \\ 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \\ \end{array}\right)$
Exercice : A partir du graphe orienté $G$, on fabrique un graphe orienté $H$ en retournant le sens de toutes les flèches.
Réponse : La matrice $J^+$ de $G$ est la matrice $J^-$ de $H$, et réciproquement. Leurs matrices d'adjacence sont transposées l'une de l'autre.
Théorème
Soient $s_1, s_2, , s_n$ les sommets d'un graphe orienté. Alors $\left( \begin{array}{c} d(s_1) \\ \vdots \\ d(s_n) \end{array} \right) = J \left( \begin{array}{c}1 \\\vdots \\1 \\\end{array} \right)$
Théorème (relation entre $J, J^+$ et $J^-$)
On note $J^+$ et $J^-$ les matrices d'incidences d'un graphe orienté, et J la matrice d'incidence du graphe non orienté qui lui est associé. Alors $J = J^+ + J^-$
On peut encore représenter un digraphe à l'aide de listes d'adjacences : en donnant pour chacun de ses sommets la liste des sommets qu'on peut atteindre directement en suivant un arc (dans le sens de la flèche).
Exemple : Voici les listes d'adjacences du digraphe G:
$1 $ | $ : $ | $ 2, 4, 6$ |
$2 $ | $ : $ | $ 4, 5$ |
$3 $ | $ : $ | $ 4$ |
$4 $ | $ : $ | $ 5$ |
$5 $ | $ : $ | $ -$ |
$6 $ | $ : $ | $ 2$ |
Théorème
Soient $(s_1, , s_n)$ les sommets d'un graphe orienté. Alors $\left( \begin{array}{c} d^+(s_1)\\ \vdots \\ d^+(s_n) \end{array} \right) = A \left(\begin{array}{c}1 \\\vdots \\1 \\\end{array} \right) \textrm{ et } \left( \begin{array}{c} d^-(s_1)\\ \vdots \\ d^-(s_n) \end{array} \right) = A^t \left( \begin{array}{c}1 \\\vdots \\1 \\\end{array} \right) $
Exercice : Décrivez le digraphe $G$ de l'exercice précédent par des listes d'adjacences.
Théorème
Le digraphe $G = (V, E)$ est sans circuits si et seulement si on peut attribuer un nombre $r(v)$, appelé le rang de $v$, à chaque sommet $v$ de manière que pour tout arc $(u, v)$ de $G$ on ait $r(u) < r(v)$.
Preuve : Si $G$ comporte un circuit $C$, il n'est pas possible de trouver de tels nombres $r(i)$ car, autrement, considérant $r(j) = max {r(i) | i \in C}$ et l'arc $(j, k) \in C$ on aurait $r(j) \leqslant r(k)$ en contradiction avec la définition de $r( )$.
Réciproquement, si $G$ n'a pas de circuits, il existe au moins un sommet sans prédécesseurs dans $G$ (sans cela, en remontant successivement d'un sommet à un prédécesseur, on finirait par fermer un circuit). Ainsi, on peut attribuer séquentiellement des valeurs $r( )$ aux sommets du graphe à l'aide de l'algorithme qui suit, ce qui conclura la démonstration.
Exercice : Attribuez un rang aux sommets du digraphe ci-dessous en utilisant l'algorithme de calcul du rang :