1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| /********************************************************/
int ALPHABETA(Tjeu*p, int alpha, int beta,int mode,int aniv,Tjeu* n_max)
/* p noeud raciune , mod max ou min , aniv c la profondeur alpha est toujours inférieur à beta */
{
int Val;
Tjeu* pf=NULL;
if((aniv==0)||feuille(p->array))// est une feuille alors retourner la valeur de P
{return(Val=evaluer(p->array));}
else
{
Tjeu* j =succ(p,mode);//tous les successeurs possibles
if(p->fils){pf=p->fils;}
while(pf)//pour tout fils Pi de P faire
{
if (mode==-1) //est un nud Min alors
{
Val = ALPHABETA(pf, alpha, beta,1,aniv-1,n_max);
if (Val<beta){beta=Val;}//beta = Min(beta, Val);
if (alpha >= beta){return (beta);} /* coupure alpha */
}
if (mode==1) //est un nud max alors
{
Val = ALPHABETA(pf, alpha, beta,-1,aniv-1,n_max);
if ((Val>alpha)||((Val==alpha)&&((rand()%2))))
{
alpha=Val;
if(aniv==niveau){copi_n(n_max,pf);}//garder chemin de meilleur
}//alpha = Max(alpha, Val) et pointer le noeud max
if (alpha >= beta){return (alpha);} /* coupure beta */
}
pf=pf->frere;
}
liber_succ(j);
if (mode==+1){return (alpha);}
if (mode==-1){return (beta);}
}
}//fin
//***************************************************** |
Partager