• Aucun résultat trouvé

entier entre 0 et k-1 Exercice 2- Calcul des composantes connexes N’importe quel parcours de graphe permet de d´eterminer les composantes connexes

N/A
N/A
Protected

Academic year: 2022

Partager "entier entre 0 et k-1 Exercice 2- Calcul des composantes connexes N’importe quel parcours de graphe permet de d´eterminer les composantes connexes"

Copied!
2
0
0

Texte intégral

(1)

Graphes i6s3 Licence L3 Info Universit´e de Bourgogne

TP1 : composantes connexes

Le but de ce TP est d’observer le ph´enom`ene suivant : si on g´en`ere un graphe al´eatoire de n sommets et m arˆetes avec m proche de n, les composantes connexes sont de tailles tr`es in´egales : une composante ”g´eante” apparaˆıt presque sˆurement alors que les autres composantes sont toutes tr`es petites.

Le graphe pourra ˆetre repr´esent´e par un tableauaretede taillem×2 : les sommets sont les entiers{0,1, . . . , n−1}et si xy est l’arˆete d’indice k, alorsarete[k][0] =x,arete[k][1] =y.

Pour calculer les composantes connexes, on prendra un tableau comp de n cases, comp[i]

permettant de stocker le num´ero de la composante dans laquelle se trouve le sommeti.

Exercice 1- Cr´eation du graphe al´eatoire `a n sommets et m arˆetes

Ecrire la fonction´ generegraphe(int n, int m, int arete[][2]) qui remplit le tableau d’arˆetes al´eatoirement (on permettra les boucles et arˆetes multiples).

Entier al´eatoire en C/C++ :

– srand(time(NULL)) ; // initialisation du g´en´erateur sur l’horloge – rand()%k // entier entre 0 et k-1

Exercice 2- Calcul des composantes connexes

N’importe quel parcours de graphe permet de d´eterminer les composantes connexes. Ici,

´

etant donn´e la fa¸con dont est cod´e le graphe, on peut utiliser l’algorithme suivant : au d´ebut chaque sommet i est dans la composante i. On passe ensuite en revue chaque arˆete xy et si comp[x]6=comp[y], on r´eaffecte tous les sommets qui ´etaient dans la mˆeme composante quey `a celle dex :

int composantes(int n, int m, int a[][2], int co[]) {

int c,x,y;

for(int i=0;i<n;i++) co[i]=i;

for(int j=0;j<m;j++) {

x=a[j][0]; y=a[j][1];

if(co[x]!=co[y]) {

c=co[y];

for(int k=0;k<m;k++)

{ if(co[a[k][0]]==c) co[a[k][0]]=co[x];

if(co[a[k][1]]==c) co[a[k][1]]=co[x];

} } } }

1

(2)

A la fin de l’algorithme, deux sommets` xetyseront dans la mˆeme composante si et seulement sicomp[x] =comp[y].

Exercice 3- Calcul et affichage des tailles des composantes connexes Ecrire une fonction qui calcule les tailles des composantes du graphe´

Ecrire une fonction qui calcule le nombre de composantes de taille´ i(trier d’abord le tableau taille) et qui l’affiche.

Exemple de r´esultat : Il y a 389 points isol´es.

Il y a 50 composantes de taille 2 Il y a 11 composantes de taille 3 Il y a 6 composantes de taille 4 Il y a 1 composante de taille 4447.

Faire varier netm pour observer l’apparition de la composante g´eante.

Exercice 4- Am´eliorations

Pour am´eliorer les performances de l’algorithme de calcul des composantes, lors de la lecture de l’arˆete xy, on peut choisir entre comp[x] et comp[y] de r´eaffecter la composante de taille minimum.

Implanter cette option et tester la diff´erence avec la version de base pour n = 50000 et m= 50000.

2

Références

Documents relatifs

Montrer que GL n ( C ) est un ouvert connexe de M n ( C ) (on pourra commencer par montrer que l’ensemble des matrices triangulaires supérieures sans zéro sur la diagonale est

• Après cet état des lieux de l’étiquetage, nous proposerons dans le quatrième chapitre une ver- sion parallèle de l’algorithme LSL ainsi qu’une méthode originale

Cela signifie que les ensembles de sommets gris et noirs sont disjoints, que les ´ el´ ements de la pile courante sont exactement les sommets gris ou noirs (qui ne sont pas

Nous proposons un algorithme incr´emental de complexit´e polynomiale permettant d’extraire, pour un graphe dynamique donn´e, toutes les composantes connexes persistantes

Lire des ebooks - « Mettez deux navires en pleine mer, sans vent, sans courant, et ils finiront par s’accoster : Jetez deux planètes immobiles dans l’espace, et elles

Théorème : U ensemble E n , ordonné par Vinclusion des parties connexes d'un n-graphe est un treillis si et seulement si les p éléments de tout cycle de longueur p forment un

Montrer qu’un espace compact v´ erifiant (C3) ne poss` ede qu’un nombre fini de composantes connexes. Montrer que l’espace F de la question 2.b

2 Étiquetage d’une image 4x5 : La première ligne présente l’image brute (1), puis le résultat (2) du traitement de la première ligne (création d’une