Salut! je veux faire en Java un petit programme qui va créer un nœud , ce nœud contient un tableau de 9 entiers (qui représente en réalité une grille 3x3 pour le jeu de taquin) et une valeur entiere qui représente le niveau, puis il va créer les successeurs de ce nœud (ou chaque successeur represente une permutation possible de 0 dans la grille)

PS: la permutation entre 0 et un autre entier n'est possible que si les deux case sont adjascente

voila le code:





la classe nœud

Code : 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
public class Noued {
int nom;
int grille[]=new int[9];
int niveau;
 
Noued suiv1;
Noued suiv2;
Noued suiv3;
Noued suiv4;
 
public Noued(){
	suiv1=null;
	suiv2=null;
	suiv3=null;
	suiv4=null;
}
 
 
}
la classe taquin8 qui contient main
Code : 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
 
import java.util.ArrayList;
 
 
public class taquin8 {
 
 
	//affichage d'une grille	
	static void affichertab(int t[])
	{
		for (int i=0;i<9;i++){ 
			if ((i%3)==2){System.out.println("["+t[i]+"]");}
			else {System.out.print("["+t[i]+"]");}
								}
 
	}
	//rechercher l'indice d'un entier
	static int indice_ent(int t[],int x)
	{int ind = 10;
		for (int i=0;i<9;i++){ 
			if (t[i]==x) ind=i;
		}
		return ind;
 
	}
 
	//rechercher l'indice de zero
	static int zero(int t[])
	{int ind = 10;
		for (int i=0;i<9;i++){ 
			if (t[i]==0) ind=i;
		}
		return ind;
 
	}
 
	//procedure pour faire la permutation de deux entiers
 
	static  void permutaion(Integer n1, Integer n2)
	{Integer t;
	t=n1;
	n1=n2;
	n2=t;
	}
 
 
 
	//Test pour les possibilités de permutaion de 0
	static ArrayList<Integer> Test_permut(int g)
	{
	ArrayList<Integer> pp=new ArrayList<Integer>();
 
 
	switch (g)
	{
	case 0:
	{
		pp.add(1);
		pp.add(3);
	break;}
 
	case 1:
	{
		pp.add(0);
		pp.add(2);
		pp.add(4);
	break;}
 
 
	case 2:
	{
		pp.add(1);
		pp.add(5);
	break;}
 
	case 3:
	{
		pp.add(0);
		pp.add(4);
		pp.add(6);
 
	break;}
 
	case 4:
	{
		pp.add(1);
		pp.add(3);
		pp.add(5);
		pp.add(7);
 
	break;}
 
	case 5:
	{
		pp.add(2);
		pp.add(4);
		pp.add(8);
 
	break;
	}
 
	case 6:
	{
	pp.add(3);
	pp.add(7);
	break;}
 
	case 7:
	{
	pp.add(4);
	pp.add(6);
	pp.add(8);
 
	break;}
 
	case 8:
	{
	pp.add(5);
	pp.add(7);
	break;}
	default:{};            
	}
 
		return pp;
	}
 
	//creer les succ dun noeud
	static Noued creer_succ (Noued rac)
	{
 
			rac.suiv1=new Noued();
			for(int i=0;i<9;i++){rac.suiv1.grille[i]=rac.grille[i];}
			rac.suiv1.niveau=rac.niveau+1;
 
			rac.suiv2=new Noued();
			for(int i=0;i<9;i++){rac.suiv2.grille[i]=rac.grille[i];}
			rac.suiv2.niveau=rac.niveau+1;
 
			rac.suiv3=new Noued();
			for(int i=0;i<9;i++){rac.suiv3.grille[i]=rac.grille[i];}
			rac.suiv3.niveau=rac.niveau+1;
 
			rac.suiv4=new Noued();
			for(int i=0;i<9;i++){rac.suiv4.grille[i]=rac.grille[i];}
			rac.suiv4.niveau=rac.niveau+1;
 
		return rac;
	}
 
	//Programme Principal
	public static void main(String[] args) {
		int start[] = {1,2,3,4,0,5,7,8,6};
		/*int goal[] = {1,2,3,4,5,6,7,8,0};*/
 
	Noued rac=new Noued();
	rac.grille=start;
	rac.niveau=0;
 
 
ArrayList<Integer> permut;
 
taquin8.creer_succ(rac);
permut=taquin8.Test_permut(taquin8.zero(rac.grille));
for(int i=0;i<permut.size();i++){System.out.print(" > "+rac.grille[permut.get(i)]);}
 
//*********
System.out.println("\n");
System.out.println("***Racine***");
taquin8.affichertab(rac.grille);
 
//*********
System.out.println(" * * * P1 * * * ");
int p1=rac.suiv1.grille[taquin8.indice_ent(rac.suiv1.grille, rac.suiv1.grille[permut.get(0)])];
rac.suiv1.grille[taquin8.indice_ent(rac.suiv1.grille, rac.suiv1.grille[permut.get(0)])]=0;
rac.suiv1.grille[taquin8.indice_ent(rac.suiv1.grille, 0)]=p1;
taquin8.affichertab(rac.suiv1.grille);
System.out.println(rac.suiv1.niveau);
//*********
System.out.println(" * * * P2 * * * ");
int p2=rac.suiv2.grille[taquin8.indice_ent(rac.suiv2.grille, rac.suiv2.grille[permut.get(1)])];
rac.suiv2.grille[taquin8.indice_ent(rac.suiv2.grille, rac.suiv2.grille[permut.get(1)])]=0;
rac.suiv2.grille[taquin8.indice_ent(rac.suiv2.grille, 0)]=p2;
taquin8.affichertab(rac.suiv2.grille);
System.out.println(rac.suiv2.niveau);
 
//*********
System.out.println(" * * * P3 * * * ");
int p3=rac.suiv3.grille[taquin8.indice_ent(rac.suiv3.grille, rac.suiv3.grille[permut.get(2)])];
rac.suiv3.grille[taquin8.indice_ent(rac.suiv3.grille, rac.suiv3.grille[permut.get(2)])]=0;
rac.suiv3.grille[taquin8.indice_ent(rac.suiv3.grille, 0)]=p3;
taquin8.affichertab(rac.suiv3.grille);
System.out.println(rac.suiv3.niveau);
//*********
 
 
 
	}
 
}
le problème ici c'est dans le 3eme et le 4eme successeurs qui ne change pas !

et j'ai pas compris pourquoi, car j'ai fais du copier/coller (avec les modification nécessaires) de la partie suivante(qui à tres bien marché avec le 2eme successeur):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
System.out.println(" * * * P1 * * * ");
int p1=rac.suiv1.grille[taquin8.indice_ent(rac.suiv1.grille, rac.suiv1.grille[permut.get(0)])];
rac.suiv1.grille[taquin8.indice_ent(rac.suiv1.grille, rac.suiv1.grille[permut.get(0)])]=0;
rac.suiv1.grille[taquin8.indice_ent(rac.suiv1.grille, 0)]=p1;
taquin8.affichertab(rac.suiv1.grille);
System.out.println(rac.suiv1.niveau);
Aidez moi svp!

Merci