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
- 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.