diff --git a/TP2 b/TP2
index 7842f9c515ab9445446ce256f5dce16a12d3a8f6..8c90ef31e5334fcce47f26e929f863d6d82585a1 100755
Binary files a/TP2 and b/TP2 differ
diff --git a/TP2.c b/TP2.c
index 9785637e9155e068c9d57fc8f1d40911637e1f3b..dc4d9d9f027517eed19b938995c19e0f65678aae 100644
--- a/TP2.c
+++ b/TP2.c
@@ -161,6 +161,7 @@ unsigned long compute_densest_core_ordering_prefix(adjlist *g, unsigned long *et
 
 
 
+
 	}
 	return max_prefix;
 }
diff --git a/TP3 b/TP3
index 272b1556eb400a4ce954769f1625d4a440252984..2c865c5723dcb9cea539ca0d5767943ff098fea6 100755
Binary files a/TP3 and b/TP3 differ
diff --git a/TP3.c b/TP3.c
index e8f863157e7eb6f57a5d5d2483af166eefd1b81c..60d9de8990f1e1e461a47c5649a92a003a4193fb 100644
--- a/TP3.c
+++ b/TP3.c
@@ -33,12 +33,13 @@ void calc_in_deg(edgelist *g, unsigned long *in_res) {
 
 // fonction réalisant nb_iter itération de power pagerank
 // distr_res doit être malloc et de taille g->n
-int pagerank(edgelist *g, long double *distr_res, long double alpha, int nb_iter) {
+int pagerank(edgelist *g, long double *distr_res, long double alpha, unsigned long nb_iter) {
 	unsigned long i, j;
 
 	unsigned long *out_deg;
+	long double *prob_t = distr_res;
 	long double *prob_t1;
-	long double *swap_buffer;
+	long double *swap_pointeur;
 
 
 	out_deg = (unsigned long*) malloc((g->n)*sizeof(unsigned long));
@@ -49,7 +50,7 @@ int pagerank(edgelist *g, long double *distr_res, long double alpha, int nb_iter
 
 	// initialisation des probas
 	for (i = 0; i < g->n; i += 1) {
-		distr_res[i] = 1./((long double) (g->n));
+		prob_t[i] = 1./((long double) (g->n));
 	}
 
 
@@ -65,16 +66,40 @@ int pagerank(edgelist *g, long double *distr_res, long double alpha, int nb_iter
 
 		// itération sur les arêtes pour chaque quantité
 		for (j = 0; j < g->e; j += 1) {
-			prob_t1[g->edges[j].t] += (1 - alpha)*(distr_res[g->edges[j].s]/out_deg[g->edges[j].s]);
+			prob_t1[g->edges[j].t] += (1 - alpha)*(prob_t[g->edges[j].s]/out_deg[g->edges[j].s]);
 		}
 
 
 		// ajout du poids alpha en plus
-		for (j = 0; j < g->n; j +=1) {}
-	}
+		for (j = 0; j < g->n; j +=1) {
+			prob_t1[j] += alpha*(1./((long double) (g->n)));
+		}
 
+		// renormalisation du vecteur
+		long double v = 0;
+		for (j = 0; j < g->n; j += 1) {
+			v += prob_t1[j];
+		}
+		v = (1-v)/((long double) (g->n));
+		for (j = 0; j < g->n; j += 1) {
+			prob_t1[j] += v;
+		}
 
+		// échange des pointeurs pour prochaine itération
+		swap_pointeur = prob_t;
+		prob_t = prob_t1;
+		prob_t1 = swap_pointeur;
+	}
 
+	// si nombre impair d'itération, copie du résultat final dans le bon tableau
+	if (nb_iter%2 == 1 || nb_iter == 0) {
+		for (i = 0; i < g->n; i += 1) {
+			distr_res[i] = prob_t[i];
+		}
+	}
+
+	free(prob_t1);
+	free(out_deg);
 	return 0;
 
 }
@@ -114,18 +139,20 @@ int main(int argc, char **argv) {
 
 
 
-
-
-
 	// fonctions du TP3
 	long double *p_distrib;
 	p_distrib = (long double*) malloc((g->n)*sizeof(long double));
 
 
 
-	pagerank(g, p_distrib, 0.5, 4);
+	pagerank(g, p_distrib, 0.001, 200);
 
-	printf("test %f = %Lf\n", (1./548552.), p_distrib[0]);
+	long double last = p_distrib[0];
+	for(int i =0; i < g->n; i +=1) {
+		if (last != p_distrib[i]) {
+			printf("|%Le|\n", p_distrib[i]);
+		}
+	}
 
 
 	return 0;