1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| void calc_chemin (Int i1, Int j1, Int i2, Int j2, Int v) {
// si on est en dehors du tableau
if (i1 == 0 || (i1 == maxi-1) || j1 == 0 || j1 == maxj-1) return ;
// on met en (i1,j1) le poids v
_matrice[j1][i1] = v;
v++; // on incrémente directement le poids
if (i1 == i2 && j1 == j2) return ; // on est arrivé ! départ = arrivée
// si le poids déja dans la case d'à côté est plus grand que le poids avec lequel on va y arriver, alors on y va
if (v < _matrice[j1+1][i1] || _matrice[j1+1][i1] == 0)
calc_chemin (i1, j1+1, i2, j2, v);
if (v < _matrice[j1-1][i1] || _matrice[j1-1][i1] == 0)
calc_chemin (i1, j1-1, i2, j2, v);
if (v < _matrice[j1][i1+1] || _matrice[j1][i1+1] == 0)
calc_chemin (i1+1, j1, i2, j2, v);
if (v < _matrice[j1][i1-1] || _matrice[j1][i1-1] == 0)
calc_chemin (i1-1, j1, i2, j2, v);
}
/* on initialise à +infini toutes les cases vides du labyrinthe
on met -1 pour les murs
puis on appelle dijkstra
*/
calc_chemin (xdepart,ydepart,xarrivee,yarrivee, 1); |
Partager