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
| import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Ville {
String nom;
double x, y;
public Ville(String nom, double x, double y) {
this.nom = nom;
this.x = x;
this.y = y;
}
public double distance(Ville autreVille) {
return Math.sqrt(Math.hypot(autreVille.x - x, autreVille.y - y));
}
@Override
public String toString() {
return nom + "[" + x + "," + y + "]";
}
public static void main(String[] args) {
Ville depart = new Ville("Paris", 15, 10);
Distance d = new Distance(new Ville("Lille", 10, 10), depart,
new Ville("Nice", 20, 15), new Ville("Rouen", 10, 20),
new Ville("Marseille", 20, 10), new Ville("Bordeaux", 10, 15));
System.out.println(d.calculCheminLePlusCourt(depart));
}
static class Distance {
private List<Ville> listeVilles;
public Distance(Ville... villes) {
if (villes.length == 0) {
throw new IllegalArgumentException(
"la liste de villes est vide");
}
this.listeVilles = new ArrayList<Ville>(Arrays.asList(villes));
}
public List<Ville> calculCheminLePlusCourt(Ville villeDepart) {
List<Ville> trajet = new ArrayList<Ville>();
ajouterVilleAuTrajet(trajet, villeDepart);
while (!listeVilles.isEmpty()) {
Ville prochaineVille = villeLaPlusProche(villeDepart);
ajouterVilleAuTrajet(trajet, prochaineVille);
villeDepart = prochaineVille;
}
return trajet;
}
private void ajouterVilleAuTrajet(List<Ville> trajet, Ville ville) {
trajet.add(ville);
listeVilles.remove(ville);
}
private Ville villeLaPlusProche(Ville villeDepart) {
double minDistance = Double.MAX_VALUE;
Ville villeLaPlusProche = null;
for (Ville ville : listeVilles) {
double distance = villeDepart.distance(ville);
if (distance < minDistance) {
minDistance = distance;
villeLaPlusProche = ville;
}
}
return villeLaPlusProche;
}
}
} |
Partager