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
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
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; } }
Partager