|
@@ -17,7 +17,7 @@ def distanceCarree(coord1, coord2):
|
|
|
def chemin(plateau, origine, cible):
|
|
def chemin(plateau, origine, cible):
|
|
|
"""retourne la liste des coord a traverser pour atteindre l'objectif
|
|
"""retourne la liste des coord a traverser pour atteindre l'objectif
|
|
|
se base sur la fonction estFranchissable() des cases"""
|
|
se base sur la fonction estFranchissable() des cases"""
|
|
|
-
|
|
|
|
|
|
|
+ print "calcul chemin: {} -> {}".format(origine, cible)
|
|
|
nO = N(origine)
|
|
nO = N(origine)
|
|
|
nO.parent = None
|
|
nO.parent = None
|
|
|
nO.coutG = 0
|
|
nO.coutG = 0
|
|
@@ -29,10 +29,9 @@ def chemin(plateau, origine, cible):
|
|
|
position = nO
|
|
position = nO
|
|
|
echec = False
|
|
echec = False
|
|
|
it = 0
|
|
it = 0
|
|
|
|
|
+
|
|
|
#on continue jusqu'a tomber sur la case cible, ou jusqu'a un echec
|
|
#on continue jusqu'a tomber sur la case cible, ou jusqu'a un echec
|
|
|
while position.coord != cible and not echec:
|
|
while position.coord != cible and not echec:
|
|
|
- it += 1
|
|
|
|
|
-## print "##", it, position.coord
|
|
|
|
|
|
|
|
|
|
#on etudie tous les voisins de la case en cours
|
|
#on etudie tous les voisins de la case en cours
|
|
|
for coord in plateau.cases[position.coord].voisins:
|
|
for coord in plateau.cases[position.coord].voisins:
|
|
@@ -61,11 +60,9 @@ def chemin(plateau, origine, cible):
|
|
|
nTest.parent = noeud.parent
|
|
nTest.parent = noeud.parent
|
|
|
nTest.cout = noeud.cout
|
|
nTest.cout = noeud.cout
|
|
|
trouve = True
|
|
trouve = True
|
|
|
-## print " | teste", coord, "maj", noeud.coutG**2, noeud.coutH, noeud.cout
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if not trouve:
|
|
if not trouve:
|
|
|
filOuvert.append(noeud)
|
|
filOuvert.append(noeud)
|
|
|
-## print " | teste", coord, "ajout", noeud.coutG**2, noeud.coutH, noeud.cout
|
|
|
|
|
|
|
|
|
|
#on parcourt les noeuds de la liste ouverte
|
|
#on parcourt les noeuds de la liste ouverte
|
|
|
#et on cherche le meilleur noeud (le cout le plus faible)
|
|
#et on cherche le meilleur noeud (le cout le plus faible)
|
|
@@ -79,7 +76,6 @@ def chemin(plateau, origine, cible):
|
|
|
else:
|
|
else:
|
|
|
if noeud.cout < meilleur.cout:
|
|
if noeud.cout < meilleur.cout:
|
|
|
meilleur = noeud
|
|
meilleur = noeud
|
|
|
-## print " >> retenu", meilleur.coord, meilleur.cout
|
|
|
|
|
|
|
|
|
|
if meilleur:
|
|
if meilleur:
|
|
|
filFerme.append(meilleur)
|
|
filFerme.append(meilleur)
|
|
@@ -93,7 +89,6 @@ def chemin(plateau, origine, cible):
|
|
|
while position.coord != origine:
|
|
while position.coord != origine:
|
|
|
chemin.insert(0, position.coord)
|
|
chemin.insert(0, position.coord)
|
|
|
position = position.parent
|
|
position = position.parent
|
|
|
-## print "retour", position.coord
|
|
|
|
|
|
|
|
|
|
return chemin
|
|
return chemin
|
|
|
|
|
|
|
@@ -107,9 +102,6 @@ class N():
|
|
|
self.coutH = 0
|
|
self.coutH = 0
|
|
|
self.cout = 0
|
|
self.cout = 0
|
|
|
|
|
|
|
|
-## def __repr__(self):
|
|
|
|
|
-## return "{} ({}+{}= {}) |".format(self.coord, self.coutG, self.coutH, self.cout)
|
|
|
|
|
-
|
|
|
|
|
def creer(self, parent, cible, kDep):
|
|
def creer(self, parent, cible, kDep):
|
|
|
self.parent = parent
|
|
self.parent = parent
|
|
|
self.kDep = kDep
|
|
self.kDep = kDep
|