kurtz le pirate , dans le message
<
kurtzlepirate-CD4...@news-4.proxad.net>, a écrit :
Bof.
> * on pousse dans le tableau 'found' /quelque chose/ sauf si dans le
> $maze->[$row + 1]->[$col], la clé {'visited'} est à 1 ?
> c'est bien ça ?
Oui.
> * je ne suis pas sur de comprendre ce qui est poussé dans le tableau.
> ne faudrait-il pas écrire :
> push @found, $maze[$row, $col] unless ...
> ou
> push @found, $maze->[$row]->[$col] unless ...
>
> et c'est bien tout le hash qui est poussé ?
> $found[x] = {'visited' => 0,'bottom' => 1,'right' => 1,}
Non, ce qui est poussé, c'est une référence sur un tableau de deux éléments
qui code les coordonnées de la case.
> J'aimerai bien comprendre :(
Ce code est assez médiocre à de nombreux points de vue (les structures de
données sont un gaspillage énorme, l'algorithme n'est pas implémenté de
manière très efficace, et il y a beaucoup de lourdeur dans le style.
Je te conseille plutôt de lire le paragraphe qui décrit l'algorithme (« the
real work happens in the next bit of code » et d'essayer d'implémenter
toi-même.
Au niveau structure de données, je te conseille ceci :
- Les coordonnées des cases vont de 1 à W et de 1 à H, avec x=0, x=W+1, y=0
et y=H+1 des rangées de fausses cases qui t'évitent les conditions de
bord (tu les marques comme déjà visitées au tout début, et c'est fini).
- La case (x, y) est codée par l'entier x+y*(W+2).
- Un tableau $visited[$n] qui te dit si la case $n est visitée.
Un second tableau $right[$n] qui te dit si tu as un mur à droite de la
case $n (et donc à gauche de la case $n+1).
Et un troisième tableau $down[$n] qui te dit si tu as un mur en dessous de
la case $n (et donc au dessus de la case $n+(W+2)).