Sélectionner une révision Git
-
Louis Fourcade a rédigéLouis Fourcade a rédigé
TP2.c 7,01 Kio
#include "./implems.c"
#include "./struct_tp2.h"
#include "./plotout.h"
#include <stdio.h>
#include <stdlib.h>
// g une liste d'adjacence décrivant le graphe
// out res un tableau de taille g->n
// ensures
// out res [i] contient le degré du noeud i
void calc_deg(adjlist *g, unsigned long *out_res) {
unsigned long i;
for (i = 0; i < g->n; i += 1) {
out_res[i] = g->cd[i+1] - g->cd[i];
}
return;
}
// g une liste d'adjacence décrivant le graphe
// eta_tab un tableau d'entiers de taille g->n (initialisé à zero)
// c_tab un tableau d'entiers de taille g-> n (initialisé à zero)
// eta_tab contient l'orde du k-orderind :
// eta[0] = noe1
// eta[1] = noe2 etc
void core_decomposition(adjlist *g, unsigned long *eta_tab, int *c_tab) {
// mise à zero des tableaux
for (unsigned long iter = 0; iter < g->n; iter+=1) {
eta_tab[iter] = 0;
c_tab[iter] = 0;
}
unsigned long v;
tp2_t deg_track;
int i, c;
i = g->n;
c = 0;
// initialise la structure
deg_track = new_tp2(g->n);
for (unsigned long k = 0; k < g->n; k += 1) {
int tmp_deg = (g->cd[k+1]) - (g->cd[k]);
if (set_deg(deg_track, k, tmp_deg) == 0) {
printf("error initialisation deg_struct\n");
return;
}
}
for (unsigned long k = 0; k < g->n; k += 1) {
int tmp_deg = (g->cd[k+1]) - (g->cd[k]);
if (get_deg(deg_track, k) != tmp_deg) {
printf("samuh à merdé\n");
return;
}
}
printf("initialisation terminée\n");
// itère jusqu'à avoir traité tous les noeuds
while (i > 0) {
// trouver un élément de degré min dans le graphe
v = elem_min_deg(deg_track);
int tmp_deg = get_deg(deg_track, v);
if (tmp_deg < 0) {
printf("error elem_min_deg est de degré -1 (tous les noeuds ont été retirés)\n");
for (unsigned long k = 0; k < g->n; k += 1) {
if (get_deg(deg_track, k) != -1) {