Bonjour,
J'aimerais faire une fonction récursive qui prend en paramètre une configuration du jeux héxapawn et qui retourne son évaluation.
cette fonction évalue récursivement tous les successeurs (configurations) pour trouver l’évaluation de la configuration du départ. Si une configuration n'a pas de successeurs, donc son évaluation est 0. sinon, si tout les évaluations des successeurs (configurations) d'une configuration sont positives, donc l'évaluation de la configuration sera (1+(le max des évaluations des successeurs))*(-1), sinon c'est 1+ (le max des évaluations des successeurs qui sont négatives)*(-1).
exemple :
.............-4
......... /...... \
........3......... 2
....../....\......./...\
....-2......0.. 0....-1
..../....\................|
...1.....0.............0
. /
.0
La fonction doit renvoyée trois.
NB :un nœud peut avoir plus que deux fils. c'est a dire une configuration peut avoir plusieurs successeurs.
Mon code :
Ne marche pas car je n'arrive pas a trouver une solution pour tester si les successeurs sont tous positives et au même temps les calculer.
Merci.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
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
45
46
47
48
49 /*config : la configuration de départ c'est une map qui a comme clé une position et Contenu comme valeur. Contenue désigne ce qu'elle contient une position (vide, un pion noir ou blanc ) n: hauteur de la grille m : longueur de la grille */ public static int calculConfig(int n ,int m,HashMap<Position,Contenu> config ){ if (onePlayerWon(isWhiteTurn, n, m, config)){ // si un joueur a gagné on retourne 0 c'est a dire la configuration n'a pas de successeur return 0; } else { boolean verif=true; int max=0; int max_neg=-100; int resultCall; List<HashMap<Position,Contenu>> listOfNextConfigs=getAllConfigPossible(isWhiteTurn, n,m,config);// renvoie la liste des configurations qui succèdent config for(int i=0;i<listOfNextConfigs.size();i++){ // pour chaque element de la liste des successeurs resultCall=calculConfig(n,m,listOfNextConfigs.get(i)); // calclule recursivement de l'évaluation de chaque successeur if (resultCall>max_neg && resultCall<0)// calcule du maximum négative des successeurs si il existe { max_neg=resultCall; } if (resultCall>max) calcule du maximum des successeurs { max=resultCall; } if(resultCall<0){ //si il existe un successeur négative on change la valeur de verif. verif=false; } } if (verif==true){// si itous les successeurs sont positifs donc on retourne 1+(max)*(-1) return 1+(max)*(-1); } else{ //sinon on retourne (max_neg-1)*(-1); return (max_neg-1)*(-1); } } }
Partager