Решая 8-головоломку с помощью BFS
Я слышал, что проблему с 8 головоломками можно решить с помощью BFS, но я не понимаю, как. Я хочу знать промежуточные шаги, которые мне нужно получить от доски, как это:
3 1 2
6 4 5
0 7 8
в
1 2 3
4 5 6
7 8 0
Являются ли промежуточные этапы "уровнями" поиска BFS?
Кстати, это базовая домашняя работа, мне нет дела до оптимальности.
1 ответ
Решение
Это в значительной степени шаблон для любого поиска 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)
обратите внимание, что мы не делаем ничего такого, как проверка циклов или что-то еще. если бы мы были, измените очередь на стек, и вы получите DFS.