wdywbac / 8-puzzle-solver

Solver for 8 puzzle using A* search algorithm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Задание

Написать программу, которая решает головоломку 8 Puzzle (и её обобщения) с использованием алгоритма A*.

https://en.wikipedia.org/wiki/15_puzzle

https://en.wikipedia.org/wiki/A*_search_algorithm

Реализуйте класс Board

Вам необходимо реализовать неизменяемый класс доски, который будет удовлетворять следующим требованиям:

  • Конструктор, принимающий массив в пространстве размерности 2, который заполнен целыми числами
  • Конструктор, принимающий размер доски и генерирующий некоторое состояние на доске
  • Метод size, возвращающий размер доски
  • Метод hamming, возвращающий количество блоков не на своих местах
  • Метод manhattan, возвращающий сумму Manhattan расстояний между блоками и целью
  • Метод is_goal, который отвечает на вопрос является ли эта доска целью
  • Метод is_solvable, который отвечает на вопрос, решаема ли такая расстановка элементов
  • Операторы == и != для board
  • Метод to_string и операторы вывода для текстового представления строк
  • Такой синтаксис должен работать: board b(3); std::cout << b[1][1] << std::endl;, выводит элемент в ячейке (1, 1)
  • Конструкторы копирования и операторы присваивания должны работать корректно

Реализуйте класс Solver

Этот класс должен предоставлять интерфейс для получения цепочек досок, которые приводят к решению, и удовлетворять следующим требованиям:

  • Конструктор, принимающий board, для которого нужно построить решение
  • Метод moves, который выводит количество перемещений, которые приводят к решению
  • Итератор, который позволяет пройтись по последовательности board, приводящей к решению
  • Конструкторы копирования и операторы присваивания должны работать корректно

Если решения не существует, тогда begin() == end(). Т.е. в решении должно быть 0 досок которые приводят к решению. Если размер доски задан 0 или 1, то можно считать, что решение есть и возможно создать лишь доску-решение.

HINT: Для решения этой задачи можно использовать стандартные итераторы stl контейнеров.

About

Solver for 8 puzzle using A* search algorithm


Languages

Language:C++ 100.0%