un algo recursif va s appeler lui meme jusqua une condition d arret
L idée de l'algo recursif est la suivante.
1) trouver un point qui verifie la ou les conditions "Etre une impasse".
2)une fois une impasse trouver remonter le chemin jusqu a une intersection et m arreter et continuer avec les autre impasse
une intersection n'est pas une impasse. ca sera la condition d arret de la recursion.
maintenant on definit ce qu est etre une impasse:
cest avoir la valeur 0, et etre entourer de trois 1 ou de un seul 0.
j opte pour le seul zero. car il va aussi me donner dans quelle direction mon chemin va pour lancer la recursion suivante.
ce code regarde mes voisins, et regarde si ca vaut 0, si oui; je met result a 1,2,3 ou 4 ce qui me permet comme dit avant de savoir la direction a prendre apres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 if(lab[x+(y-1)*N] == 0 ) result = 1; //regarde a droite: if(lab[x+1 + y*N] == 0) if(result!= 0) return; //on a deja trouver un 0, donc 2 zero ce n est //pas une impasse pas la peine de continuer else result = 2; //regarde en bas: if (lab[x + (y + 1) * N] == 0) if (result != 0) return; else result = 3; //regarde a hauche: if(lab[x-1 + y*N]== 0) if(result!= 0) return; else result = 4;
mais si mon result est different de 0, c est que j ai deja trouver un 0 autour de mon point, ce qui fait que ce n est pas une impasse et donc je te poursuit pas l algo.
si le return n existe pas enmatlab utilise un booleen que tu met a true au debut, et a false a la place de mes return.
si je passe tout ces tests alors je fait ma recurrence
et ici tu peux ajouter avant, si monbooleen est == true, alors
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 lab[x+y*N] = 1; switch(result) { case 1: DeleteDeadLock(x, y-1); break; case 2: DeleteDeadLock(x+1, y);break; case 3: DeleteDeadLock(x, y+1);break; case 4: DeleteDeadLock(x-1, y);break; }
Partager