Notation: 2,5 pts par TP réussi et 2,5 pts par Bonus validé.
Il y a plusieurs erreurs dans le code. Le prof a confirmé qu'il allait publier une version corrigée, mais ce n'est pas encore le cas. En attendant, voici quelques explications et une correction possible (quick and dirty):
def shortest_path(source, target):
"""
Retourne la liste la plus courte des paires (movie_id, person_id)
qui connecte la source à la cible (target)
Si ce n'est pas possible, retourne "none"
"""
solution = list()
initial = Node(state=source, parent=None, action=None)
frontier = QueueFrontier()
frontier.add(initial)
explored = set()
i = 0
while True:
# Plus rien dans frontier, c'est qu'il n'y a pas de lien
if frontier.empty():
return None
node = frontier.remove()
# print("\n\nNode in= ",node, ' i=', i)
if node.state == target:
while node.parent is not None:
pid, mid = node.state, node.action
solution.append((mid, pid))
node = node.parent
solution.reverse()
return solution
explored.add(node)
children = neighbors_for_person(node.state)
for child in children:
child_node = Node(state=child[1], action=child[0],parent=node)
frontier.add(child_node)
if child_node.state == target:
while child_node.parent is not None:
pid, mid = child_node.state, child_node.action
solution.append((mid, pid))
child_node = child_node.parent
solution.reverse()
return solution