algorithmique (école d'ingénieur) · Chapitre 5 · Application directe du cours
Deux lignes de bus, à la main
Chemins de valeur optimale · niveau 1 (application)
Énoncé
Six villes sont desservies par deux lignes : de à pour le coût , de à pour le coût , avec
- Calculer à la main le tableau des coûts minimum .
- En déduire un trajet de coût minimum de la ville à la ville .
- Écrire la fonction d'affichage
acm(M, D1, D2, j), qui retrouve le dernier trajet sans tableau d'arguments.
Corrigé
- Base : , . Puis, par croissants :
- ;
- ;
- ;
- .
Donc .
nom : M
valeurs : 0 5 20 20 60 40
colorier : 5
vert : 0..4
fleches : 4->5 3->5
legende : m(5) = min(60 + 10, 20 + 20) = 40
- On remonte : est atteint par la ligne longue depuis ; par la ligne longue depuis ; par la ligne courte depuis . Trajet , de coût . On remarque qu'il ne passe pas par la ville , pourtant .
nom : M
valeurs : 0 5 20 20 60 40
vert : 0 1 3 5
griser : 2 4
fleches : 0->1:5 1->3:15 3->5:20
legende : trajet 0 → 1 → 3 → 5, de coût 40 : la ville 4 est évitée
- On teste lequel des deux cas réalise :
static void acm(int[] M, int[] D1, int[] D2, int j) {
if (j == 0) { System.out.print("0"); return; } // trajet réduit à la ville 0
if (j == 1 || M[j] == M[j - 1] + D1[j - 1]) { // dernier trajet : j-1 -> j
acm(M, D1, D2, j - 1); // trajet 0 .. j-1 affiché
System.out.printf("--(%d)-->%d", D1[j - 1], j);
} else { // dernier trajet : j-2 -> j
acm(M, D1, D2, j - 2); // trajet 0 .. j-2 affiché
System.out.printf("--(%d)-->%d", D2[j - 2], j);
} // donc trajet 0 .. j affiché
}
M = [0, 5, 20, 20, 60, 40]
Coût minimum m(5) = 40 : 0--(5)-->1--(15)-->3--(20)-->5100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.