Bonjour
j'essaye d'écrire une classe Distance qui prends en paramètre une liste de Ville
chaque ville a un numéro,un X, un Y et un prix par km.
mon bute c'est de :
1/prendre une ville au hasard de la Liste comme ville initial.
2/ trouvé la ville la plus proche (grasse a ma méthode distance(Ville v,Ville v1))
3/se rendre a la ville la plus proche et calculer de nouveau ou se trouve la ville la plus proche sans revenir a la ville de départ
exemple
j'ai 4 ville:
ville1
ville2
ville3
ville4
je pars de ville 3>>ville1 et de la je cherche la ville la plus proche on va dire que c'est 3 mais je peux pas revenir car je suis déjà passé donc il me reste la ville4 et 2
je cherche la plus proche des 2.
j'ai écrit un code mais j'arrive pas a trouvé mon erreur ce n'est pas une erreur de langage mais de raisonnement
Cordialement
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
import java.util.ArrayList;
import java.util.Random;
 
 
public class Distance {
public Distance (ArrayList res){
	calculChemin(res);
}
 
public void calculChemin (ArrayList loc){
	Object tmp[]=loc.toArray();
	boolean visite=false;
	int rand = new Random().nextInt(loc.size());
	while(rand==0){
	rand = new Random().nextInt(loc.size());
	}
	int j = 0,index=0;
	int loca=rand;
	System.out.println("Ville de départ avec : "+rand);
	//while(visite==false){
	double y=distance((Ville)loc.get(loca),(Ville)loc.get(j));
	tmp[rand]=0;
	for (int p =0;p<50;p++){
 
 
 
						for( int i=0;i<loc.size();i++){
									if (y>distance((Ville)loc.get(loca),(Ville)loc.get(i))&&loca!=i&&((Object) tmp[i]).equals(0)!=true){ 
										y=distance((Ville)loc.get(loca),(Ville)loc.get(i));
									    index=i;	
															}
														}
						System.out.println("La ville suiviante est  : "+index);
						tmp[index]=0;
						loca=index;
												y=distance((Ville)loc.get(loca),(Ville)loc.get(j));
												int ran = new Random().nextInt(loc.size());
												while(y==0){
												ran = new Random().nextInt(loc.size());
												j=ran;
												}
												for (int l=0;l<tmp.length;l++){
													if (tmp[l].equals(0)){
														visite=true;
																			}
													else{visite=false;
																break;}
																		}
	}
	for (int l=0;l<tmp.length;l++){System.out.println("tmp["+l+"] = "+tmp[l]);}
	System.out.println("la valeur de visite = "+ visite);
 
}
//													}
	public double distance(Ville v,Ville v1){
		double dis=Math.sqrt(Math.pow((v1.getPosX()-v.getPosX()),2)+Math.pow((v1.getPosY()-v.getPosY()),2));
		return dis;
 
 
}
 
}
j'ai mis un for jusqu'à 50. en attendant que je trouve le problème et le remplacer par un while qui est en commentaire