Récursivité d'un solver héxapawn

Fermé
zinou0659 Messages postés 1 Date d'inscription dimanche 21 octobre 2018 Statut Membre Dernière intervention 21 octobre 2018 - 21 oct. 2018 à 13:18
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 21 oct. 2018 à 14:49
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 :
..............3
......... /...... \
........2......... 1
....../....\......./...\
....-3......0.. 0....-1
..../....\................|
...2.....0.............0
. /.. \
.0...-1
........|
........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.
Voici mon code :
/*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 il existe un successeur négative donc on retourne 1+(max)*(-1)
	    		
		    	 return 1+(max)*(-1);
		    	 
		     }
	     else{ //sinon on retourne (max_neg-1)*(-1);
	    	 
	    	   return (max_neg-1)*(-1);
	     }
	     }
	     
	}

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 oct. 2018 à 14:49
0