diff --git a/search/search.py b/search/search.py index 2c63913..cdacabe 100644 --- a/search/search.py +++ b/search/search.py @@ -105,21 +105,48 @@ def depthFirstSearch(problem): if(problem.isGoalState(noeudCourant)): # print "Nous avons atteint le but !" return listeDirections - break - # Effectuer la recherche + # Effectuer la recherche de successeurs for s in problem.getSuccessors(noeudCourant): # Decomposer le tuple pour faciliter la lecture succNoeudCourant, succDirection, succCost = s - # Verifier si le noeud n'est pas deja visite + # Verifier si le noeud n'est pas deja visite et n'est pas dans la pile if (succNoeudCourant not in maListeFermee): # Dans ce cas, ajouter le noeud et le chemin pour s'y rendre a la pile - # print "Ajout du noeud à la pile: ", succNoeudCourant + # print "Ajout du noeud a la pile: ", succNoeudCourant maPile.push((succNoeudCourant,listeDirections+[succDirection])) + print "pas de solution" util.raiseNotDefined() def breadthFirstSearch(problem): """Search the shallowest nodes in the search tree first.""" "*** YOUR CODE HERE ***" + maFile = util.Queue() + maListeFermee = [] + # Verifier si le depart est un but + if problem.isGoalState(problem.getStartState()): + return [] + # Mettre le premier noeud et un chemin vide dans la file + maFile.push((problem.getStartState(),list())) + while (not maFile.isEmpty()): + # Extraire le noeud courant + noeudCourant, listeDirections = maFile.pop() + print "Noeud courant: ", noeudCourant + # La marquer comme visite + maListeFermee.append(noeudCourant) + # Verifier si c'est un but + if(problem.isGoalState(noeudCourant)): + print "Nous avons atteint le but !" + return listeDirections + # Effectuer la recherche de successeurs + for s in problem.getSuccessors(noeudCourant): + # Decomposer le tuple pour faciliter la lecture + succNoeudCourant, succDirection, succCost = s + # Verifier si le noeud n'est pas deja visite et n'est pas dans la file + if (succNoeudCourant not in maListeFermee+[i[0] for i in maFile.list]): + # Dans ce cas, ajouter le noeud et le chemin pour s'y rendre a la file + print "Ajout du noeud a la file: ", succNoeudCourant + maFile.push((succNoeudCourant,listeDirections+[succDirection])) + print "pas de solution" util.raiseNotDefined() def uniformCostSearch(problem):