Ejemplo n.º 1
0
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);
    }
    
}
Ejemplo n.º 2
0
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;	
	}
}