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

avec les .c ca marches mieux

parent 821f272f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -13,7 +13,7 @@ clean:
$(EXECUTABLE): TP2.o file.o
$(EXECUTABLE): TP2.o struct_tp2.o
$(CC) $(OPTIONS) -o $@ $^ $(MATH) -g
......
......@@ -26,6 +26,7 @@ void core_decomposition(adjlist *g, int *eta_tab, int *c_tab) {
return;
}
}
printf("initialisation terminée\n");
// itère jusqu'à avoir traité tous les noeuds
......@@ -94,6 +95,7 @@ int main(int argc, char **argv) {
g=al_readedgelist(argv[1]);
t3 = time(NULL);
printf("- edge list time = %ldh%ldm%lds\n",(t3-t1)/3600,((t3-t1)%3600)/60,((t3-t1)%60));
// printf("- edge list time = %I64dh%I64dm%I64ds\n",(t3-t1)/3600,((t3-t1)%3600)/60,((t3-t1)%60));
printf("Number of nodes: %lu\n",g->n);
printf("Number of edges: %lu\n",g->e);
......@@ -104,6 +106,7 @@ int main(int argc, char **argv) {
t2=time(NULL);
printf("- Overall time = %ldh%ldm%lds\n",(t2-t1)/3600,((t2-t1)%3600)/60,((t2-t1)%60));
// printf("- Overall time = %I64dh%I64dm%I64ds\n",(t2-t1)/3600,((t2-t1)%3600)/60,((t2-t1)%60));
......
#include <stdio.h>
#include <stdlib.h>
#include "struct_tp2.h"
struct tp2_s
{
//le nombre de noeud
unsigned long _size;
//le tableau des noeuds trier par degrée croissant
unsigned long *_tab_ordre;
//le tableau donnant le premier élément de chaque degré
unsigned long *_tab_first_deg;
//le tableau donnant le degré de chaque noeud
int *_tab_deg;
//le tableau contenant la position d'un élément dans le tableau _tab_ordre
int *_tab_pos;
};
int decrease_deg(tp2_t t, unsigned long elem);
int increase_deg(tp2_t t, unsigned long elem);
tp2_t new_tp2(unsigned long size)
{
tp2_t ret = (tp2_t)malloc(sizeof(struct tp2_s));
ret->_size = size;
unsigned long *intern_tab_1 = (unsigned long *)malloc(sizeof(unsigned long) * size);
int *intern_tab_2 = (int *)malloc(sizeof(int) * size);
unsigned long *intern_tab_3 = (unsigned long *)malloc(sizeof(unsigned long) * size);
int *intern_tab_4 = (int *)malloc(sizeof(int) * size);
ret->_tab_ordre = intern_tab_1;
ret->_tab_deg = intern_tab_2;
ret->_tab_first_deg = intern_tab_3;
ret->_tab_pos = intern_tab_4;
for (unsigned long i = 0; i < ret->_size; i++)
{
ret->_tab_ordre[i] = i;
ret->_tab_deg[i] = -1;
ret->_tab_first_deg[i] = ret->_size;
ret->_tab_pos[i] = i;
}
return ret;
};
int set_deg(tp2_t t, unsigned long elem, int deg)
{
if (elem >= t->_size)
{
printf("error set_deg : %li n'est pas un noeud valide\n", elem);
return 0;
}
// printf("in %li\n", elem);
while (t->_tab_deg[elem] < deg)
{
increase_deg(t, elem);
}
while (t->_tab_deg[elem] > deg)
{
decrease_deg(t, elem);
}
// printf("out %li\n", elem);
return 1;
};
int destruct_tp2(tp2_t t)
{
free(t->_tab_deg);
free(t->_tab_first_deg);
free(t->_tab_ordre);
free(t->_tab_pos);
free(t);
return 1;
};
int remove_elem(tp2_t t, unsigned long elem)
{
if (elem >= t->_size)
{
printf("error remove_elem : %li n'est pas un noeud valide\n", elem);
return 0;
}
return set_deg(t, elem, -1);
};
int decrease_deg(tp2_t t, unsigned long elem)
{
if (elem >= t->_size)
{
printf("error decrease_deg : %li n'est pas un noeud valide\n", elem);
return 0;
}
if (t->_tab_deg[elem] >= 0)
{
unsigned long tmp = t->_tab_ordre[t->_tab_pos[elem]];
int deg = t->_tab_deg[elem];
t->_tab_ordre[t->_tab_pos[elem]] = t->_tab_ordre[t->_tab_first_deg[deg]];
t->_tab_ordre[t->_tab_first_deg[deg]] = tmp;
t->_tab_first_deg[deg]++;
t->_tab_deg[elem]--;
}
return 1;
};
int increase_deg(tp2_t t, unsigned long elem)
{
if (elem >= t->_size)
{
printf("error increase_deg : %li n'est pas un noeud valide\n", elem);
return 0;
}
unsigned long tmp = t->_tab_ordre[t->_tab_pos[elem]];
int deg = t->_tab_deg[elem];
t->_tab_ordre[t->_tab_pos[elem]] = t->_tab_ordre[t->_tab_first_deg[deg + 1] - 1];
t->_tab_ordre[t->_tab_first_deg[deg + 1] - 1] = tmp;
t->_tab_first_deg[deg + 1]--;
t->_tab_deg[elem]++;
return 1;
};
unsigned long elem_min_deg(tp2_t t)
{
unsigned long tmp = t->_tab_first_deg[0];
if (tmp >= t->_size)
{
tmp = 0;
}
return t->_tab_ordre[tmp];
};
int get_deg(tp2_t t, unsigned long elem)
{
if (elem >= t->_size)
{
printf("error get_deg : %li n'est pas un noeud valide\n", elem);
return 0;
}
return t->_tab_deg[elem];
};
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