2009-12-10 3 views
0

J'ai entendu dire que le problème des 8 puzzles pouvait être résolu via BFS, mais je ne comprends pas comment. Je veux connaître les étapes intermédiaires que je dois obtenir d'un conseil d'administration comme celui-ci:Tackling the 8-puzzle via BFS

3 1 2 
6 4 5 
0 7 8 

à

1 2 3 
4 5 6 
7 8 0 

sont les étapes intermédiaires « niveaux » sur une recherche BFS? Au fait, ceci est un devoir de base, je ne me soucie pas de l'optimalité.

Répondre

4

c'est à peu près un modèle pour toute recherche BFS

function next_boards(board) 
    yields a set of reachable in one move from the current board 

queue = [start_board] 

while true: 
    current = queue.pop() 
    if current = goal: break 

    queue.push for all next_boards(current) 

note que nous ne faisons rien de fantaisie comme la vérification des cycles ou quoi que ce soit. si nous étions, changez la file d'attente à une pile, et vous obtenez DFS.

+1

Oui, fondamentalement, utilisez une file d'attente FIFO et développez chaque noeud à chaque noeud suivant possible. Si je ne me trompe pas, le 8-puzzle peut prendre près d'un million de nœuds développés dans le pire des cas, alors assurez-vous que votre objet état est petit ou permettez à votre mémoire virtuelle de croître afin d'éviter les erreurs de mémoire. Le cas moyen devrait être> 100K nœuds développés. –

Questions connexes