You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
\item Mettre $ARBRE \leftarrow\ \emptyset,\ RETOUR \leftarrow\ \emptyset\ et\ et\ i\leftarrow\ 1$. Pour tout sommet x de G, mettre $pere(x)\leftarrow0$ et $k(x)\leftarrow0$
106
+
\item Choisir un sommet r pour lequel k(r)=0 (condition utile pour les graphes non connexes, voir étape 6). Mettre $DFN(r) \gets i,\ k(r) \gets1,\ u \gets r$
107
+
\item Si tous les arêtes incident à u sont tous examiné, va vers étape 5, ou alors choisir un arête e=(u,v) qui n'a pas été examiné
108
+
\item On oriente l'arête e de u vers v et on le marque comme examiné
109
+
\begin{enumerate}
110
+
\item si k(v)=0, alors on met $i \gets i+1,\ DFN(v)\gets i,\ ARBRE\gets ARBRE \cup\{e\},\ k(v)\gets1,\ pere(v)\gets u\ et\ u\gets v$, et retourne à l'étape 3
111
+
\item si k(v)=1, alors on met $RETOUR\gets RETOUR\cup\{e\}$, et retourne à l'étape 3
112
+
\end{enumerate}
113
+
\item Si $pere(u)\neq0$, alors $u\gets pere(u)$, et on retourne à l'étape 3
114
+
\item (Seulement pour les graphes non connexe, pour qu'on puisse passé d'un composant à un autre.) Si il existe un sommet r tel que k(r)=0, alors $i\gets i+1$ et on retourne à l'étape 2.
115
+
\item Stop
116
+
\end{enumerate}
117
+
118
+
119
+
120
+
\subsubsection{DFS pour les graphes orientés}
121
+
La DFS dans un digraphe G (connexe et acyclique) est similaire au cas d'un graphe non orienté. L'algorithme divise les arcs de G en quatre classes différentes. Si la recherche arrive à un arc e=(x,y) non examiné, alors les quatre classes possibles sont:
122
+
\begin{enumerate}
123
+
\item Si y n'a pas encore été visité, alors e est un arête de l'arbre de la DFS
124
+
\item Si y a été visité, alors il y a trois cas possible:
125
+
\begin{enumerate}
126
+
\item y est un descendant de x dans le sous graphe induit par un arbre de la DFS existant, alors e est un arête avant et DFN(y)>DFN(x)
127
+
\item x est descendant de y dans le sous graphe induit par un arbre de la DFS, alors e est un arête de retour et DFN(y)<DFN(x)
128
+
\item x et y n'ont aucune relation par rapport à aucun arbre de la DFS existant. Alors e est un arête de travers et DFN(y)<DFN(x).(Note: il est impossible que DFN(y)>DFN(x))
129
+
\end{enumerate}
130
+
\end{enumerate}
131
+
132
+
Le sous graphe orienté de G induit par les arêtes de l'arbre est appelé forêt de la DFS (forêt orienté). Si DFN(y)>DFN(x) pour un arc(x,y), alors (x,y) est un arête avant ou bien arête de l'arbre de la DFS.
133
+
Durant la recherche, il est facile de différentier ces deux cas puisque (x,y) est un arête de l'arbre si y n'a pas encore été visité, et arête avant sinon. Si DFN(y)<DFN(x), alors (x,y) est un arête de retour ou bien arête de travers. Durant la recherche, il est aussi facile de distinguer les deux puisque (x,y) est un arête de travers si y est complètement analysé, et arête de retour sinon.
134
+
77
135
78
-
\end{verbatim}
136
+
Dans la suite, pere, k, ARBRE et RETOUR sont définis comme précédemment. On a aussi deux nouveaux variables "AVANT" et "TRAVERS" et $$L(x)= \left\{
137
+
\begin{array}{l l}
138
+
1 & \quad\text{si le x est complètement analysé}\\
\item Mettre $ARBRE \leftarrow\ \emptyset,\ RETOUR \leftarrow\ \emptyset\ et\ et\ i\leftarrow\ 1,\ AVANT\gets\emptyset,\ TRAVERS\gets\emptyset$. Pour tout sommet x de G, mettre $pere(x)\leftarrow0$, $k(x)\leftarrow0,\ L(x)\gets0$
145
+
\item Choisir un sommet r pour lequel k(r)=0. Mettre $DFN(r) \gets i,\ k(r) \gets1,\ u \gets r$
146
+
\item Si tous les arêtes sortant de u sont tous examiné, va vers étape 5, sinon choisir un arête e=(u,v) qui n'a pas été examiné
147
+
\item Marque l'arc e comme examiné
148
+
\begin{enumerate}
149
+
\item si k(v)=0, alors on met $i \gets i+1,\ DFN(v)\gets i,\ ARBRE\gets ARBRE \cup\{e\},\ k(v)\gets1,\ pere(v)\gets u\ et\ u\gets v$, et retourne à l'étape 3
150
+
\item si k(v)=1 et DFN(v)>DFN(u), alors on met $AVANT\gets AVANT\cup\{e\}$, et retourne à l'étape 3
151
+
\item si k(v)=1 et DFN(v)<DFN(u) et L(v)=0, alors on met $RETOUR\gets RETOUR\cup\{e\}$, et retourne à l'étape 3
152
+
\item si k(v)=1 et DFN(v)<DFN(u) et L(v)=1, alors on met $TRAVERS\gets TRAVERS\cup\{e\}$, et retourne à l'étape 3
153
+
\end{enumerate}
154
+
\item Si $pere(u)\neq0$, alors $u\gets pere(u)$, et on retourne à l'étape 3
155
+
\item (Seulement pour les graphes non connexe, pour qu'on puisse passé d'un composant à un autre.) Si il existe un sommet r tel que k(r)=0, alors $i\gets i+1$ et on retourne à l'étape 2.
0 commit comments