Skip to content
Extraits de code Groupes Projets
Valider df60abfc rédigé par Samuh's avatar Samuh
Parcourir les fichiers

Diametre par BFS

parent 05cecb23
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -4,30 +4,57 @@ ...@@ -4,30 +4,57 @@
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
int BFS(adjlist* g, unsigned long s){ unsigned long BFS(adjlist* g, unsigned long *s){
file_t F = new_file(42); file_t F = new_file(100000);
int* marked = (int *)malloc((g->n)*sizeof(int)); int* marked = (int *)malloc((g->n)*sizeof(int));
for (unsigned long i = 0; i < g->n; i++) for (unsigned long i = 0; i < g->n; i++)
{ {
marked[i] = 0; marked[i] = -1;
} }
enfile(F,s); enfile(F,*s);
marked[s] = 1; marked[*s] = 0;
unsigned long tmp = *s;
while (!is_empty(F)) while (!is_empty(F))
{ {
unsigned long tmp = defile(F); tmp = defile(F);
// printf("%li %li %li %li\n", tmp, marked[tmp], g->cd[tmp], g->cd[tmp+1]);
for (unsigned long i = g->cd[tmp]; i < g->cd[tmp+1]; i++) for (unsigned long i = g->cd[tmp]; i < g->cd[tmp+1]; i++)
{ {
if (marked[g->adj[i]] == 0) if (marked[g->adj[i]] == -1)
{ {
enfile(F,g->adj[i]); if (enfile(F,g->adj[i]) == 1)
marked[g->adj[i]] = 1; {
marked[g->adj[i]] = marked[tmp] + 1;
}
else
{
printf("\n\nPile trop petite !\n\n");
}
} }
} }
} }
*s = tmp;
return marked[tmp];
}
unsigned long diameter(adjlist *g){
if (g->n == 0)
{
return 0; return 0;
} }
else
{
unsigned long start = 1;
unsigned long old_depth = -1;
unsigned long new_depth = 0;
while (new_depth != old_depth)
{
old_depth = new_depth;
new_depth = BFS(g,&start);
}
return new_depth;
}
}
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
...@@ -190,7 +217,13 @@ int main(int argc,char** argv){ ...@@ -190,7 +217,13 @@ int main(int argc,char** argv){
printf("- Overall time = %ldh%ldm%lds\n",(t2-t1)/3600,((t2-t1)%3600)/60,((t2-t1)%60)); printf("- Overall time = %ldh%ldm%lds\n",(t2-t1)/3600,((t2-t1)%3600)/60,((t2-t1)%60));
// DIAMETRE
printf("\n\ncalcul du diamètre\n");
t1 = time(NULL);
printf("diamètre %li\n", diameter(g));
t2 = time(NULL);
printf("- Overall time = %ldh%ldm%lds\n",(t2-t1)/3600,((t2-t1)%3600)/60,((t2-t1)%60));
// TRIANGLES // TRIANGLES
printf("\n\ncalcul du nombre de triangles\n"); printf("\n\ncalcul du nombre de triangles\n");
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter