Code : Tout sélectionner
import copy
class Pile:
def __init__(self):
self.pile = []
def est_vide(self):
return self.pile == []
def empiler(self, elem):
self.pile.append(elem)
def depiler(self):
assert len(self.pile ) > 0, ("non")
return self.pile.pop()
def sommet(self):
assert len(self.pile) > 0, ("non")
return self.pile[len(self.pile)-1]
def taille(self):
return len(self.pile)
def afficher(self):
for i in range(self.taille()):
print(self.pile[i])
#Partie A
laby = [
[0,1,0,0,0,0],
[0,1,1,1,1,0],
[0,1,0,1,0,0],
[0,1,0,1,1,0],
[0,1,1,0,1,0],
[0,0,0,0,1,0]]
laby2 =[
[0,1,0,0,0,0,0,0,0],
[0,1,1,1,1,0,1,1,0],
[0,1,0,1,0,0,1,0,0],
[0,1,0,1,1,1,1,1,0],
[0,1,0,0,0,1,1,0,0],
[0,1,0,1,1,0,1,1,0],
[0,1,0,1,0,0,0,1,0],
[0,1,1,1,0,1,1,1,0],
[0,0,0,0,0,1,0,0,0]]
laby3 =[ #pas de sortie
[0,1,0,0,0,0,0,0,0],
[0,1,1,1,1,0,1,1,0],
[0,1,0,1,0,0,1,0,0],
[0,1,0,1,1,1,1,1,0],
[0,1,0,0,0,1,1,0,0],
[0,1,0,1,1,0,1,1,0],
[0,1,0,1,0,0,0,1,0],
[0,1,1,1,0,1,1,1,0],
[0,0,0,0,0,0,0,0,0]]
def hauteur(tab):
return len(tab)
def largeur(tab):
return len(tab[0])
def afficher_grille(tab):
return tab
# a) renvoi la liste des cases voisines où je peux me déplacer
# b) [(1,1)] car on ne peut que se déplacer vers cette case depuis l'emplacement (0,1)
#Partie B
def voisins(T,v):
V = []
i, j = v[0],v[1]
for a in (-1,1):
if 0<=i+a<hauteur(T):
if T[i+a][j]==1:
V.append((i+a,j))
if 0<=j+a<largeur(T):
if T[i][j+a]==1:
V.append((i,j+a))
return V
def parcours(laby, entree, sortie):
tab = copy.deepcopy(laby)
p = Pile()
v = entree
tab[v[0]][v[1]] = 'x'
recherche = True
while recherche == True:
vois = voisins(tab, v)
if vois == []:
if p.est_vide():
return False
else:
v = p.depiler()
else:
p.empiler(v)
v = vois[0]
tab[v[0]][v[1]] = 'x'
if v == sortie:
p.empiler(v)
recherche = False
return p.afficher()
#1 tab←−copie de laby
#2 p←− Pile()
#3 v←− entree
#4 case v dans tab←− 0
#5 recherche ←− Vrai
#6 Tant Que recherche est Vraie
# 7 vois ← voisins(tab, v)
# 8 Si la liste vois est vide alors
# 9 Si p est vide alors
# 10 retourner Faux
# 11 sinon
# 12 v ←− p.depiler()
# 13 FinSi
# 14 sinon
# 15 on empile p avec v
# 16 v ←− 1er voisin
# 17 case v dans tab←− 0
# 18 Si v = sortie alors
# 19 on empile p avec v
# 20 recherche←− False
# 21 FinSi
#22 FinTantQue
#23 retourner p