Chapitre 2
2.3.4. Organigramme de l'algorithme fondé sur le test 2 permettant de testant
l'absence de circuit.
Il existe dans A une
ligne i ne comportant
que des zéros.
Supprimer dans A la ligne et la
colonne i.
Soit R la matrice résultante..
Redéfinir A en posant A=R
A ne contient
que des zéros.
OUI
NON
OUI
NON
Eventuellement,
obtention d'un
circuit en
appliquant
l'algorithme 2.3.5.
Il existe au moins un
circuit.
Soit M la matrice d'adjacence d'un
graphe G.
Définir la matrice A en posant A=M.
2.3.5. Organigramme de l'algorithme d'obtention d'un circuit.
Supposons qu'après l'application de l'algorithme 2.3.4, nous voyons qu'un graphe G
possède au moins un circuit. Il est possible alors de construire explicitement un tel
circuit. Pour ce faire, il faut partir d'un sommet du sous graphe G* défini par la
matrice M* = (a*ij) obtenue à la dernière itération de l'algorithme 2.3.4.
M*;
I={i1};
k=1;
1
j
i
k
i
/I
ja
i*
Obtention d'un circuit :
)
j
i
x,
k
i
,...,x
1j
i
x,
j
i
(xc
OUI
NON
Choisir
tel que :
1
k
i
a*
 
1k
1k iII ;i
k=k+1
2.3.7. Organigramme de l'algorithme d'obtention des niveaux d'un graphe sans
circuit.
Considérons un graphe sans circuit G=(X,U) de matrice d'adjacence M.
Les n niveaux de G sont les n sous-ensembles de sommets définis en 2.3.2.
X(i) , i=0,..n de la façon suivante:
X(0)= {x / xX , +(x)=}
X(1)={x / xX - X(0), +(x) X(0) }
X(2)={x / xX - ( X(0)X(1) ), +(x) X(0) X(1)}
.
.
.
X(n)={x / xX - ( X(0)X(1)X(n-1) ), +(x) X(0)X(1)X(n-1)}
L'algorithme suivant permet de construire les niveaux successifs d'un graphe sans
circuit :
Le partage en niveaux d'un graphe simplifie la recherche de chemon minimale ou
maximale entre sommets.
M
i=0
X(i) est l'ensemble des sommets correspondants aux lignes non
marqués ne contenant que des 1 barrées ou des zéros.
X(i) =
Marquer les
lignes de X(i) et
barrer les
colonnes
correspondantes
NON
FIN
OUI
i=i+1
2.4.4. Organigramme de l'algorithme d'obtention du noyau d'un graphe sans
circuit.
L'existence d'un tel noyau est justifiée par le théorème 2.4.2.
M
Choisir une ligne ne contenant que des zéros.
Marquer cette ligne d'une croix. Entourer la
colonne correspondante à cette ligne. Barrer les
lignes ayant un 1 dans la colonne entourée. Barrer
les colonnes correspondantes.
Il existe une ligne non
marquée et non barrée ne
contenant que des 1
barrés ou des zéros.
Choisir une ligne non marquée et
non barrée ne contenant que des
1 barrés ou des zéros
Noyau = { sommets marqués}
Chapitre 3
3.2.1 Version récursive du parcours en profondeur d'un graphe.
3.2.1.1 Algorithme général
Le programme principal a la structure suivante :
var i : integer ;
gr : GRAPHE ;
marque : array[1..n] of boolean ;
…………………………………………………….
begin
for i:=1 to n do marque[i]:=false ;
for i:=1 to n do
if not (marque[i]) then prof(i,gr,marque)
end;
La procédure récursive prof de parcours en profondeur ressemble à :
procedure prof(i : Integer; g : GRAPHE; var M : array[1..n] of boolean);
{ s est un sommet où commence le parcours }
var i,v : Integer ; { v est un sommet }
M[s] := true ;
{ on marque le sommet s }
{ 1 : première rencontre avec s }
for j :=1 to n do d°+ de s dans g do
begin
v:=j ième- succ-de s dans g ; { rencontre de l’arc (s,v) à l’aller }
if not (M[v]) then prof(v,g,M) ; { rencontre de l’arc (s,v) au retour }
end
{ 2 : dernière rencontre avec s }
end prof ;
1 / 23 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !