====== Glouton : Chemin dans une grille ======
===== Présentation =====
On se donne une grille de nombre. Par exemple :
| 17|7|21|71|40|77|58|42|67|48 |
| 1|40|70|54|43|60|19|49|32|6 |
| 58|91|69|75|1|27|89|50|74|77 |
| 96|28|89|18|9|67|30|32|14|52 |
| 24|77|44|83|2|51|20|16|50|69 |
| 53|75|52|3|21|46|59|68|86|24 |
| 52|45|80|82|19|47|18|68|16|92 |
| 14|65|43|16|4|79|61|43|72|88 |
* On veut suivre un chemin dans cette grille allant de la case en haut à gauche à la case en bas à droite,
* on ne peut se déplacer que d'une case, vers la droite ou vers le bas,
* pour chaque case, on cumule le chiffre écrit dans la case.
Le but est d'obtenir le plus grand score.
=== Réprésentation Python de la grille ===
grid = [
[17, 7, 21, 71, 40, 77, 58, 42, 67, 48],
[1, 40, 70, 54, 43, 60, 19, 49, 32, 6],
[58, 91, 69, 75, 1, 27, 89, 50, 74, 77],
[96, 28, 89, 18, 9, 67, 30, 32, 14, 52],
[24, 77, 44, 83, 2, 51, 20, 16, 50, 69],
[53, 75, 52, 3, 21, 46, 59, 68, 86, 24],
[52, 45, 80, 82, 19, 47, 18, 68, 16, 92],
[14, 65, 43, 16, 4, 79, 61, 43, 72, 88]
]
LIGNES = len(grid) # nombre de lignes
COLONNES = len(grid[0]) # nombre de colonnes
=== Exemple ===
| **17** | **7** | **21** | **71** | 40 |77|58|42|67|48 |
| 1 | 40 | 70 | **54** | 43 |60|19|49|32|6 |
| 58 | 91 | 69 | **75** | **1** |27|89|50|74|77 |
| 96 | 28 | 89 | 18 | **9** | 67|30|32|14|52 |
| 24 | 77 | 44 | 83 | **2** | **51** | **20** | **16** | 50 | 69 |
| 53 | 75 | 52 | 3 | 21 | 46 | 59 | **68** | **86** | **24** |
| 52|45|80|82|19|47|18|68|16|**92** |
| 14|65|43|16|4|79|61|43|72|**88** |
Le parcours marqué en gras totalise un score de :
$$17 + 7 + 21 + \cdots + 92 + 88 = 702$$
===== Approche gloutonne =====
À chaque pas, on se dirige vers la case (à droite ou en bas) contenant le score maximal.
===== Avec un fichier =====
On pourrait aussi stocker le contenu de la grille dans un fichier csv comme celui-ci : {{ :nsi:tds:algorithmes:glouton:grid.csv |}}
Il faudrait alors charger le fichier pour lire la grille avant de pouvoir chercher le parcours.
===== À faire =====
Un module
# glouton.py
def glouton(grid) -> str:
"""
grid: tableau 2D contenant des entiers
renvoie le parcours fait de mouvements H, B, G, D
donnant le parcours glouton de coin supérieur gauche
au coin inférieur droit
"""
def load_grid(filename:str):
"""
filename: nom de fichier
renvoie la grille contenu dans le fichier
"""
Une première démo :
# demo1.py
from glouton import glouton
grid = [
[17, 7, 21, 71, 40, 77, 58, 42, 67, 48],
[1, 40, 70, 54, 43, 60, 19, 49, 32, 6],
[58, 91, 69, 75, 1, 27, 89, 50, 74, 77],
[96, 28, 89, 18, 9, 67, 30, 32, 14, 52],
[24, 77, 44, 83, 2, 51, 20, 16, 50, 69],
[53, 75, 52, 3, 21, 46, 59, 68, 86, 24],
[52, 45, 80, 82, 19, 47, 18, 68, 16, 92],
[14, 65, 43, 16, 4, 79, 61, 43, 72, 88]
]
LIGNES = len(grid) # nombre de lignes
COLONNES = len(grid[0]) # nombre de colonnes
# utilisation de la fonction et affichage de la réponse
et une deuxième démonstration
#demo2.py
import glouton
glouton.load_grid("grid.csv")
# utilisation de la fonction et affichage de la réponse