Construire un arbre en java

ImFaith Messages postés 57 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 17 mars 2015 - 16 déc. 2013 à 00:17
ImFaith Messages postés 57 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 17 mars 2015 - 16 déc. 2013 à 09:23
Bonjour,
j'aimerai construire un arbre comme suit: J'ai deux listes :
ChoixX={1,2,3}
ChoixY={1,2,4};

On a deux acteurs; X et Y; chaqu'un veut prendre un nombre d'éléments parmi sa liste, çàd X veut prendre soit : 1 , 2 ou 3 éléments : {1},{1,2},{1,2,3}
Y veut aussi soit prendre 1, 2 ou3 éléments comme suit : {1},{1,2},{1,2,4} à condition: les éléments pris par un acteur seront excluent des choix de deuxième acteur . Je veux construire cet arbre dont chaque noued représente : l'acteur, et les éléments à affecter.

Voici un essaye mais j'ai pas arrivé à construire cet arbre :

private void buildTree(DefaultMutableTreeNode racine,int Acteur1, int Acteur2, ArrayList<Integer> Actions1, ArrayList<Integer> Actions2){
	   if(Actions1.size() != 0 && Actions2.size() != 0){
	    for(int i = 0; i < Actions1.size(); i++){
	    	String S = "(";
	    	for(int h = 0; h <= i; h++){
	    		S = S + Actions1.get(h)+",";
	    		if(Actions2.contains(Actions1.get(h))){
	    		   Actions2.remove(Actions2.indexOf(Actions1.get(h)));
	    		}
	    		Actions1.remove(h);
	    	}
	    	S = S + ")";
	      DefaultMutableTreeNode rep = new DefaultMutableTreeNode(Acteur1+","+i+"," +S);
	       //Et une branche 
	       for(int j = 0; j < Actions2.size(); j++){
	           S = "(";
	           for(int h = 0; h <= j; h++){
		       S = S + Actions2.get(h)+",";
		       if(Actions1.contains(Actions2.get(h))){
			   Actions1.remove(Actions1.indexOf(Acteur2.get(h)));
			}
		        Actions2.remove(h);
		    }
		  S = S + ")";	
	          DefaultMutableTreeNode rep2 = new DefaultMutableTreeNode(Cluster2+","+j+ ","+S);
	          //Cette fois, on ajoute les feuilles
	         /* for(int k = 1; k < 5; k++)
	            rep2.add(new DefaultMutableTreeNode("Sous-fichier enfant n°" + k));*/
	            rep.add(rep2);
	            if(Actions1.size() == 0){
	  	        rep.add(new DefaultMutableTreeNode("feuille"));
	             if(Actions2.size() == 0){
	      	        rep2.add(new DefaultMutableTreeNode("feuille"));
	             } 
	            buildTree(racine,Acteur1, Acteur2, Actions1, Actions2);
	            Actions1 = (ArrayList<Integer>) this.Actions1.clone();
		         Actions2 = (ArrayList<Integer>) this.Actions2.clone();   
	        }
	      racine.add(rep);	      
	    }
	 }
  }



Est ce quelqu'un parmi vous a une réponse, j'en suis vraiment besoin. merci en avance.

2 réponses

KX Messages postés 16747 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 9 juillet 2024 127
16 déc. 2013 à 00:40
"X veut prendre soit : 1 , 2 ou 3 éléments : {1},{1,2},{1,2,3}"
Il ne peut pas prendre {2}, {3}, {1,3}, {2,3} ?

"les éléments pris par un acteur seront excluent des choix de deuxième acteur"
Par exemple, X prends {1}, que peux prendre Y ? {2} et {2,4} ?
ImFaith Messages postés 57 Date d'inscription dimanche 6 décembre 2009 Statut Membre Dernière intervention 17 mars 2015
16 déc. 2013 à 09:23
Bonjour KX;

merci pour votre attention. Oui, je veux que les acteurs prennent les éléments selon cet ordre. Par exemple: X peut prendre {1},{1,2},{1,2,3} et pas d'autre combinaisons. Et quand X choisi , Y doit choisir selon l'ordre les éléments non pas encore choisi par X. Si X choisi de prendre 2 éléments qui sont {1,2}, Y a qu'une possibilité : est de choisir un élément :{4}. Dans chaque noeud, un acteur choisi un nombre d'élements, le prochain noeuad représente les choix du deuxième acteur. On atteint les feuilles dans cet arbre, quand une liste est vide.
est ce que t'as des proposition, j'en ai vraiment besoin. merci bcp
Rejoignez-nous