\chapter{Connectivité dans un graphe}

\section{Algorithme de Roy-Warshall}

\paragraph{Exercice page 101}

\tikzstyle{vertex}=[circle,fill=black!25,minimum size=20pt,inner sep=0pt]
\tikzstyle{edge} = [draw,thick,-]
\tikzstyle{weight} = [font=\small]
\tikzstyle{selected edge} = [draw,line width=5pt,-,red!50]
\tikzstyle{ignored edge} = [draw,line width=5pt,-,black!20]

\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
  thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\Large\bfseries}]
  \node[main node] (1) {A};
  \node[main node] (2) [right of=1] {B};
  \node[main node] (3) [right of=2] {C};
  \node[main node] (4) [below of=2] {D};
  \node[main node] (5) [below right of=3] {E};

  \path[every node/.style={font=\sffamily\small}]
    (1) edge node[right] {$u_1$} (2)
        edge node[left] {$u_2$} (4)
    (2) edge node[left] {$u_3$} (3)
    (3) edge node[left] {$u_4$} (5)
    (4) edge node [left] {$u_5$} (3)
        edge node[left] {$u_6$} (5)
;
\end{tikzpicture}

Soit $M$ la \emph{matrice binaire} associée à un graphe.

\[
M= \begin{bmatrix}
  0 & 1 & 0 & 1 & 0\\
  0 & 0 & 1 & 0 & 0\\
  0 & 0 & 0 & 0 & 1\\
  0 & 0 & 1 & 0 & 1\\
  0 & 0 & 0 & 0 & 0
 \end{bmatrix}
\]

\subsubsection{Représenter le graphe associé.}

$M$ est la matrice $n\times n$ avec $n$ le nombre de sommets (ou n\oe uds) du
graphe.\\

Ici, on a 5 sommets~: $A$, $B$, $C$, $D$ et $E$.
$$m_{i,j}=1\Longleftrightarrow\exists\text{ un arc }(i,j)$$

\subsubsection{Donner la matrice d'incidence de ce graphe.}

Soit la matrice $A$~: $n\times m$, avec $n$ le nombre de \emph{sommets} du
graphe et $m$ le nombre \emph{d'arcs} du graphe.

\[
M=\bordermatrix{~ & u_1 & u_2 & u_3 & u_4 & u_5 & u_6 \cr
              A & +1 & +1 &  & & &  \cr
              B & -1 & & +1 & & &  \cr
              C &  & & & +1 & -1 &  \cr
              D &  & -1 & & & +1 & +1 \cr
              E &  &  & & -1 &  & -1 \cr}
\]

$a_{i,j}=+1$ si $i$ est à l'origine de l'arc $j$, $a_{i,j}=-1$ si $i$ est à
l'extrêmité terminale de $j$, $a_{i,j}=0$ sinon.

\subsubsection{Calculer $M^2$, $M^3$, $M^4$, \ldots et interpréter les termes non nuls de ces matrices.}

\[
M^2= \begin{bmatrix}
  0 & 0 & 2 & 0 & 1\\
  0 & 0 & 0 & 0 & 1\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 1\\
  0 & 0 & 0 & 0 & 0
 \end{bmatrix}
\]

$a_{3,1}=2$, cela signifie qu'il existe deux chemins de longueur 2 reliant $A$
à $C$~: $ABC$ et $ADC$.
$a_{5,1}=2$, cela signifie qu'il existe un chemin de longueur 2 reliant $A$
à $E$~: $ADE$.

\[
M^3= \begin{bmatrix}
  0 & 0 & 0 & 0 & 2\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0
 \end{bmatrix}
\qquad
M^4= \begin{bmatrix}
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0
 \end{bmatrix} = M^n\quad\forall n\geq 4
\]

Grâce à $M^3$, on voit qu'il n'existe que deux chemins de longueur trois
reliant $A$ à $E$~: $ABCE$ et $ADCE$.

Il n'existe pas de chemin plus grand que 3, car on a une matrice nulle pour
$M^4$.

\subsubsection{Calculer les puissances booléennes de $M$, soit $M^{\left[2\right]}$,
  $M^{\left[3\right]}$, $M^{\left[4\right]}$, \ldots}

\[
M^{\left[2\right]}= \begin{bmatrix}
  0 & 0 & 1 & 0 & 1\\
  0 & 0 & 0 & 0 & 1\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 1\\
  0 & 0 & 0 & 0 & 0
 \end{bmatrix}
\qquad
M^3= \begin{bmatrix}
  0 & 0 & 0 & 0 & 1\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0\\
  0 & 0 & 0 & 0 & 0
 \end{bmatrix}
\]

Dans ce cas, on dit qu'il existe au moins un chemin de longueur deux reliant
les points où l'intersection dans la matrice n'est pas nulle.\\
On a perdu l'information du nombre de chemin, on sait seulement si un chemin
existe ou non.

\subsubsection{Calculer la fermeture réflexo-transitive du graphe.}

$$B=I\dot{+}M\dot{+}M^{\left[2\right]}\dot{+}\ldots$$

\[
I= \begin{bmatrix}
  1 & 0 & 0 & 0 & 0\\
  0 & 1 & 0 & 0 & 0\\
  0 & 0 & 1 & 0 & 0\\
  0 & 0 & 0 & 1 & 0\\
  0 & 0 & 0 & 0 & 1
 \end{bmatrix}\text{ la matrice identitée}
\]

\paragraph{En clair~:} $B$ correspond en fait à un OU logique appliqué à
l'ensemble des matrices.

\[
B= \begin{bmatrix}
  1 & 1 & 1 & 1 & 1\\
  0 & 1 & 1 & 0 & 1\\
  0 & 0 & 1 & 0 & 1\\
  0 & 0 & 1 & 1 & 1\\
  0 & 0 & 0 & 0 & 1
 \end{bmatrix}
\]

Pour chacun des éléments non nuls de la matrice $B$, on peut dire qu'il existe
au moin un chemin (de longueur indéterminée). La matrice $B$ permet donc de
savoir si deux sommets sont interconnectés dans le graphe.

\subsubsection{Algorithme de Roy-Warshall.}

L'algorithme de Roy-Warshall permet de calculer $B$ sans calculer les produits
matriciels.

\subsection{Étapes}
\begin{itemize}
  \item On calcul $B=I\dot{+}M$~;
  \item On calcul l'image de $B$ par l'opérateur $\theta_1$, soit
    $B=\theta_1(B)$~;
  \item On calcul l'image de $B$ par l'opérateur $\theta_2$~;
  \item Ainsi de suite, jusqu'à $\theta_n$.
\end{itemize}

\subsection{Opérateur $\theta_i$}

\begin{itemize}
  \item On considère toutes les lignes de $B$ qui ont un 1 en colonne $i$~;
  \item On ajoute (addition booléenne $\dot{+}$) à chacune de ces lignes tous les 1 de la ligne $i$~;
\end{itemize}

\[
B=\theta_1(B)=
\begin{bmatrix}
  1 & \textbf{1} & 0 & 1 & 0\\
  0 & \textbf{1} & \textbf{1} & 0 & 0\\
  0 & \textbf{0} & 1 & 0 & 1\\
  0 & \textbf{0} & 1 & 1 & 1\\
  0 & \textbf{0} & 0 & 0 & 1
\end{bmatrix}
\xrightarrow{\theta_2}
\begin{bmatrix}
  1 & 1 & \textbf{1} & 1 & 0\\
  0 & 1 & \textbf{1} & 0 & 0\\
  0 & 0 & \textbf{1} & \textbf{0} & \textbf{1}\\
  0 & 0 & \textbf{1} & 1 & 1\\
  0 & 0 & \textbf{0} & 0 & 1
\end{bmatrix}
\xrightarrow{\theta_3}
\begin{bmatrix}
  1 & 1 & 1 & 1 & \textbf{1}\\
  0 & 1 & 1 & 0 & \textbf{1}\\
  0 & 0 & 1 & 0 & \textbf{1}\\
  0 & 0 & 1 & 1 & \textbf{1}\\
  0 & 0 & 0 & 0 & \textbf{1}
\end{bmatrix}
\]

\paragraph{Exercice 2 page 101}

\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
  thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\Large\bfseries}]
  \node[main node] (1) {A};
  \node[main node] (2) [right of=1] {B};
  \node[main node] (3) [below right of=2] {C};
  \node[main node] (4) [below left of=3] {D};
  \node[main node] (6) [below left of=1] {F};
  \node[main node] (5) [below right of=6] {E};

  \path[every node/.style={font=\sffamily\small}]
    (1) edge [bend right] node[right] {} (2)
        edge [bend right] node[left] {} (6)
    (2) edge [bend right] node[left] {} (1)
        edge [loop] node {} (2)
        edge [bend left] node[left] {} (3)
        edge [bend left] node[left] {} (5)
    (3) edge [bend right] node[left] {} (4)
    (4) edge [right] node [left] {} (2)
        edge [bend right] node[left] {} (3)
        edge [bend left] node[left] {} (5)
    (5) edge [loop] node [left] {} (5)
        edge [bend left] node[left] {} (6)
        edge [bend left] node[left] {} (2)
    (6) edge node [left] {} (3)
        edge [bend right] node[left] {} (1)
;
\end{tikzpicture}

\subsubsection{Calculer les demi-degrés extérieurs et intérieurs des sommets du graphe}

$\Gamma^+(A),\Gamma^+(B),\ldots$~; $\Gamma^+(A)={B,F}$, $\Gamma^+(B)={A,B,C,E}$, \ldots

$\Gamma^-(A),\Gamma^-(B),\ldots$~; $\Gamma^-(A)={B,F}$, $\Gamma^+(B)={A,B,C,E}$, \ldots\\

$\Gamma^+$~: la liste des descendants immédiats de $i$ et $\Gamma^+$~: la liste
des prédécesseurs immédiats de $i$.\\

\textbf{Le demi-degré intérieur} du sommet $i$ $\leftarrow d'(i)$~: le nombre
de prédécesseurs immédiats de $i$, à l'exception de $i$ lui-même.

\textbf{Le demi-degré extérieur} du sommet $i$ $\leftarrow d''(i)$~: le nombre
de successeurs immédiats de $i$, à ;'exception de $i$ lui-même.\\

$\Gamma^+(A)={B,F}$~: $d''(A)=2$

$\Gamma^+(B)={A,B,D,E}$~: $d''(B)=3$

\subsubsection{Donner un exemple de chemin simple mais non élémentaire.}

Un \textbf{chemin est simple} s'il ne passe qu'une fois par l'ensemble de ces
arcs. Exemple~: $ABCDBE$.

Un \textbf{chemin est élémentaire} s'il ne passe qu'une fois par l'ensemble de ces
sommets.

\subsubsection{Existe-il un circuit Hamiltonien dans ce graphe~?}

Un \textbf{circuit} est un chemin qui se ferme sur lui-même.

Un \textbf{circuit hamiltonien} est un circuit passant par tous les sommets du
graphe.

\subparagraph{Problème du voyageur de commerce} Le voyageur de commerce visite
une fois et une seul chaque ville, puis retourne à la ville de départ.

\section{Recherche de plus court chemin optimal}

\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
  thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\Large\bfseries}]
  \node[main node] (3) {C};
  \node[main node] (1) [below left of=3] {A};
  \node[main node] (2) [below right of=2] {B};
  \node[main node] (4) [below of=3] {D};
  \node[main node] (5) [right of=2] {E};

  \path[every node/.style={font=\sffamily\small}]
    (1) edge node[right] {4} (3)
        edge node[left] {8} (4)
    (2) edge node[left] {2} (5)
        edge [bend left] node[left] {2} (4)
    (3) edge [bend left] node[left] {3} (2)
        edge [bend right] node[left] {4} (4)
    (4) edge [bend right] node [left] {-6} (3)
        edge [bend right] node[left] {1} (5)
;
\end{tikzpicture}

\subsection{Méthode matricielle}

Pas de sommet source.

Cette méthode donne en une seule exécution le chemin le plus court ou le chemin
le plus long entre deux sommets.

On cherche le chemin de valeur maximale reliant deux sommets.

\subsubsection{Initialisation}
On considère deux matrices $D_0$ et $\Pi_0$, de dimension $n\times n$, avec $n$
le nombre de sommets (ici 5).

\[
D_0=\bordermatrix{~ & A & B & C & D & E \cr
              A & -\infty & -\infty & 4 & 8 & -\infty \cr
              B & -\infty & -\infty & -\infty & 2 & 2 \cr
              C & -\infty & 3 & -\infty & 4 & -\infty \cr
              D & -\infty & -\infty & -6 & -\infty & 1 \cr
              E & -\infty & -\infty & -\infty & -\infty & -\infty \cr}
\qquad
\Pi_0=\bordermatrix{~ & A & B & C & D & E \cr
              A & 1 & 1 & 1 & 1 & 1 \cr
              B & 2 & 2 & 2 & 2 & 2 \cr
              C & 3 & 3 & 3 & 3 & 3 \cr
              D & 4 & 4 & 4 & 4 & 4 \cr
              E & 5 & 5 & 5 & 5 & 5 \cr}
\]

$(D_0)_{i,j}=v_{i,j}=$ la valeur de l'arc $(i,j)$ si cet arc est présent\newline
sinon $(D_0)_{i,j}=-\infty$\newline
$(\Pi_{ij})=i$, $\forall j$.

\subsubsection{À chaque étape $k\geq 1$}

On calcule ma matrice $D_k$ obtenue en replaçant $(D_{k-1})_{i,j}$ par
$\max\lbrace(D_{k-1})_{i,j}, x\rbrace$, $x$ correspond à la somme du $k$-ième
terme de la ligne et du $k$-ième terme de la colonne où se trouve
$(D_k)_{i,j}$.

On itére pour $k=1,2,\ldots,n$. Ici $n=5\longmapsto$ on lit le résultat cherché
par l'intermédiaire des matrices $(D_n, \Pi_n)$.

\[
D_1=\bordermatrix{~ & A & B & C & D & E \cr
              A & -\infty & -\infty & 4 & 8 & -\infty \cr
              B & -\infty & -\infty & -\infty & 2 & 2 \cr
              C & -\infty & 3 & -\infty & \textbf{4} & -\infty \cr
              D & -\infty & -\infty & -6 & -\infty & 1 \cr
              E & -\infty & -\infty & -\infty & -\infty & -\infty \cr}
\qquad
\Pi_1=\bordermatrix{~ & A & B & C & D & E \cr
              A & 1 & 1 & 1 & 1 & 1 \cr
              B & 2 & 2 & 2 & 2 & 2 \cr
              C & 3 & 3 & 3 & \textbf{3} & 3 \cr
              D & 4 & 4 & 4 & 4 & 4 \cr
              E & 5 & 5 & 5 & 5 & 5 \cr}
\]
$\max\lbrace4,-\infty+8\rbrace$. La première colonne étant composée de
$-\infty$, les deux matrices sont identiques. On a $D_0\equiv D_1$ et
$\Pi_0\equiv \Pi_1$.

\[
D_2=\bordermatrix{~ & A & B & C & D & E \cr
              A & -\infty & -\infty & 4 & 8 & -\infty \cr
              B & -\infty & -\infty & -\infty & 2 & 2 \cr
              C & -\infty & 3 & -\infty & \textbf{5} & \textbf{5} \cr
              D & -\infty & -\infty & -6 & -\infty & 1 \cr
              E & -\infty & -\infty & -\infty & -\infty & -\infty \cr}
\qquad
\Pi_2=\bordermatrix{~ & A & B & C & D & E \cr
              A & 1 & 1 & 1 & 1 & 1 \cr
              B & 2 & 2 & 2 & 2 & 2 \cr
              C & 3 & 3 & 3 & \textbf{2} & \textbf{2} \cr
              D & 4 & 4 & 4 & 4 & 4 \cr
              E & 5 & 5 & 5 & 5 & 5 \cr}
\]
Dans $\Pi_2$~: $(\Pi_2)_{i,j}=(\Pi)_{2,j}$

\[
D_3=\bordermatrix{~ & A & B & C & D & E \cr
              A & -\infty & \textbf{7} & 4 & \textbf{9} & \textbf{9} \cr
              B & -\infty & -\infty & -\infty & 2 & 2 \cr
              C & -\infty & 3 & -\infty & 5 & 5 \cr
              D & -\infty & \textbf{-3} & -6 & \textbf{-1} & 1 \cr
              E & -\infty & -\infty & -\infty & -\infty & -\infty \cr}
\qquad
\Pi_3=\bordermatrix{~ & A & B & C & D & E \cr
              A & 1 & \textbf{3} & 1 & \textbf{2} & \textbf{2} \cr
              B & 2 & 2 & 2 & 2 & 2 \cr
              C & 3 & 3 & 3 & 2 & 2 \cr
              D & 4 & \textbf{3} & 4 & \textbf{2} & 4 \cr
              E & 5 & 5 & 5 & 5 & 5 \cr}
\]

\[
D_4=\bordermatrix{~ & A & B & C & D & E \cr
              A & -\infty & 7 & 4 & 9 & \textbf{10} \cr
              B & -\infty & \textbf{-1} & \textbf{-4} & 2 & \textbf{3} \cr
              C & -\infty & 3 & \textbf{-1} & 5 & \textbf{6} \cr
              D & -\infty & -3 & -6 & -1 & 1 \cr
              E & -\infty & -\infty & -\infty & -\infty & -\infty \cr}
\qquad
\Pi_4=\bordermatrix{~ & A & B & C & D & E \cr
              A & 1 & 3 & 1 & 2 & \textbf{4} \cr
              B & 2 & \textbf{3} & \textbf{4} & 2 & \textbf{4} \cr
              C & 3 & 3 & \textbf{4} & 2 & \textbf{4} \cr
              D & 4 & 3 & 4 & 2 & 4 \cr
              E & 5 & 5 & 5 & 5 & 5 \cr}
\]

La dernière ligne étant composée de $=-\infty$, $D_5\equiv D_4$ et
$\Pi_5\equiv\Pi_4$.

\subsubsection{Lecture du résultat via $D_5$ et $\Pi_5$}

On lit dans la case $(D_n)_{i,j}$ la valeur du chemin le plus long reliant $i$
à $j$. Exemple~: le chemin le plus long allant de $A$ à $E$ est de longueur
10.\\

$(\Pi_n)_{i,j}$ est le prédécesseur immédiat de $j$, soit $j'$.

$(\Pi_n)_{i,j'}$ est le prédécesseur immédiat de $j'$, soit $j''$, \ldots

\paragraph{Remarque} Le même algorithme procure également les chemins les plus
courts en appliquant deux changements~:
\begin{itemize}
  \item \textbf{Initialisation~:} on initialise la matrice à $+\infty$ au lieu
    de $-\infty$.
  \item \textbf{À l'itération $k$~:} on remplace l'opération $\max$ par
    $\min$.
\end{itemize}
