Задача «Обход графа»

Реализовать два алгоритма обхода графа (DFS — поиск в глубину и BFS — поиск в ширину), используя паттерн проектирования «Шаблонный метод».

Для переопределения должны быть доступны следующие методы:

  • Начало обхода.
  • Конец обхода.
  • Посещение узла V.
  • Посещение ребра E.

Оба алгоритма должны иметь унифицированный интерфейс (реализуя, таким образом, паттерн «Стратегия»).

Абстракцию графа желательно вынести в отдельный класс, сделав его либо параметром шаблона, либо передавая в алгоритм указатель/ссылку на объект базового класса представления графа.