void predec_succ(p_Bnoeud x,int valeur) { if (recherche_val_Barbre(x, valeur) == FAUX) printf(" La valeur n'existe pas. \n"); else { int i; if (x == NULL) printf(" erreur X == NuLL. \n"); i = recherche_dichotomique(x->cle, x->cpt, valeur); if (x->cle[i] == valeur){ //predecesseur predecesseur(i, x, valeur); //successeur successeur(i, x, valeur); } else if (x->fils == NULL) printf(" La valeur n'existe pas. \n"); else predec_succ(x->fils[i], valeur); } }
void Dijkstra(graphe* pg, int i0, int p[], int lambda[]){ int i, j; int s; int lambdamin; int listeSommets[MAX_VERTEX_NUM]; p[i0] = -1; lambda[i0] = 0; for(i=0; i<pg->n; i++){ lambda[i] = LMDMAX; listeSommets[i]=0; } listeSommets[i0]=1; lambda[i0]=0; i = i0; while(somme(listeSommets,pg->n)!=pg->n){ j= successeur(i , -1, pg); printf("Premier successeur de %d = %d\n", i, j); while(j != -1){ if(listeSommets[j] == 0){ printf("->%d, courant lambda[%d] = %d\n", j, j, lambda[j]); printf("lambda[%d](%d) + val(%d -> %d)(%d) = %d\n", i, lambda[i], i, j, pg->tab[i][j], lambda[i] + pg->tab[i][j]); if(lambda[j]>lambda[i] + pg->tab[i][j]){ lambda[j]=lambda[i] + pg->tab[i][j]; p[j] = i; printf("->%d, nouveau labmda[%d] = %d\n", j, j, lambda[j]); } } j=successeur(i, j, pg); } printf("\n"); lambdamin=1+pg->n*LMDMAX; i=-1; for(s=0; s<pg->n; s++){ if(listeSommets[s] == 0 && lambda[s] < lambdamin){ i=s; lambdamin=lambda[i]; } } printf("On sélectionne le sommet %d de marque minimum lambda = %d\n", i, lambdamin); listeSommets[i]=1; } }