import java.util.List;

final static int maxInteger = Integer.MAX_VALUE;

void verifierVille(String s) {
  assertion(latitudes.containsKey(s), s + " n'est pas une ville connue");
}
// Affiche une ville de nom s
void afficheVille(String s) {
  verifierVille(s);
  double latitude = latitudes.get(s);
  double longitude = longitudes.get(s);
  affichePointSurCarte(longitude, latitude);
}
// Affiche une ville de nom s en indiquant le num�ro num
void afficheVilleAvecNumero(String s, int num) {
  verifierVille(s);
  double latitude = latitudes.get(s);
  double longitude = longitudes.get(s);
  affichePointSurCarte(longitude, latitude, num);
}
// Affiche toutes les villes
void afficheToutesVilles() {
  for(String ville : latitudes.keySet())
	afficheVille(ville);
}
// Affiche une route directe entre deux villes
void afficheRouteDirecte(String ville1, String ville2, IntensiteRoute intensite) {
  verifierVille(ville1);
  verifierVille(ville2);
  afficheRouteSurCarte(longitudes.get(ville1),
					   latitudes.get(ville1),
					   longitudes.get(ville2),
					   latitudes.get(ville2),
					   intensite);
}
// Affiche toutes les routes directes
void afficheToutesRoutesDirectes() {
  for(String depart : voisins.keySet())
	for(String arrivee : voisins.get(depart))
	  // Pour �viter de tracer deux fois la m�me route
	  if(depart.compareTo(arrivee0) {
		afficheRouteDirecte(depart, arrivee, LEGER);
	  }
}
// Calcule la distance entre deux villes
int distance(String ville1, String ville2) {
  verifierVille(ville1);
  verifierVille(ville2);
  if(voisins.get(ville1).contains(ville2)) {
	return distanceEuclidienne(longitudes.get(ville1),
							   latitudes.get(ville1),
							   longitudes.get(ville2),
							   latitudes.get(ville2));
  else {
	return maxInteger;
  }
}
// afficher un chemin sur la carte
void afficherChemin(List<String> chemin) {
  int longueur = chemin.size();
  for(int j = 1; j < longueur; j++)
	afficheRouteDirecte(chemin.get(j - 1),
						chemin.get(j),
						MOYEN);
}
// afficher un chemin avec les num�os d'ordre de passage
void afficherCheminAvecNumeros(List<String> chemin) {
  int longueur = chemin.size();
  afficheVilleAvecNumero(chemin.get(0)1);
  for(int j = 1; j < longueur; j++) {
	afficheRouteDirecte(chemin.get(j - 1),
						chemin.get(j),
						MOYEN);
	afficheVilleAvecNumero(chemin.get(j), j + 1);
  }
}
// Calculer la longueur d'un chemin.
int longueurChemin(List<String> chemin) {
  int cardinal = chemin.size();
  int longueur = 0;
  for(int j = 1; j < cardinal; j++) {
	int dist = distance(chemin.get(j - 1), chemin.get(j));
	assertion(dist < maxInteger, "Le chemin passe par une route inexistante");
	longueur += dist;
  }
  return longueur;
}
void main() {
  afficherCheminAvecNumeros(plusCourtCheminGogleMap("Brest""Nice"));
}