Adloun

algorithmique (école d'ingénieur) · Chapitre 5 · Exercice de TD

Le robot et les cases interdites

Chemins de valeur optimale · niveau 2

Énoncé

Le petit robot du chapitre (déplacements N, E, NE) ne peut pas se poser sur certaines cases : un tableau booléen indique les obstacles.

  • Modifier la récurrence en utilisant la valeur .
  • Comment savoir s'il existe au moins un chemin de à ?
  • Programmer, et tester sur la grille (ligne en bas) avec deux jeux d'obstacles : les cases , , , puis les cases , , .

Corrigé

  • Base. si n'est pas interdite, sinon.

Hérédité. Pour : si est interdite ; sinon , où les cases hors grille sont omises et où le résultat reste si tous les prédécesseurs valent (case inaccessible).

  • Il existe un chemin si et seulement si .
  • On calcule ligne par ligne :

static int[][] calculerM(int[][] G, boolean[][] X) {
    int L = G.length, C = G[0].length;
    int[][] M = new int[L][C];
    for (int l = 0; l < L; l++)
        for (int c = 0; c < C; c++) {
            if (X[l][c]) { M[l][c] = MOINS_INFINI; continue; }    // case interdite
            if (l == 0 && c == 0) { M[0][0] = G[0][0]; continue; } // base
            int p = MOINS_INFINI;                                  // meilleur prédécesseur
            if (l > 0) p = Math.max(p, M[l - 1][c]);
            if (c > 0) p = Math.max(p, M[l][c - 1]);
            if (l > 0 && c > 0) p = Math.max(p, M[l - 1][c - 1]);
            M[l][c] = (p <= MOINS_INFINI / 2) ? MOINS_INFINI : p + G[l][c];
        }
    return M;
}

Avec le premier jeu d'obstacles, le robot contourne par la droite ; avec le second, la case est enfermée :


ligne 2 : [-oo, 7, 9, 21]
ligne 1 : [6, -oo, -oo, 18]
ligne 0 : [1, 3, 6, 10]
valeur maximum 21
ligne 2 : [-oo, -oo, -oo, -oo]
ligne 1 : [-oo, -oo, -oo, -oo]
ligne 0 : [1, -oo, -oo, -oo]
aucun chemin

La complexité reste .

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 →