Adloun

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)-->5

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →