Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 189896a59e7f26ae277b85780d110aa3f90c3eb1
  • master par défaut protégée
2 résultats

TP2.c

Blame
  • 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) {