Скачайте проект.
На этот раз в лабиринт с сокровищами попал Жадина! Лабиринт очень старый и все свободные клетки успели покрыться зарослями. Для каждой клетки лабиринта известна её трудность — количество сил, которые потратит Жадина на прохождение зарослей этой клетки.
После каждого шага силы Жадины уменьшаются на трудность клетки, в которую он шагнул. Когда силы заканчиваются, Жадина останавливается.
Чтобы жизнь удалась, Жадине нужно собрать N сундуков. При этом Жадина отказывается идти к сундуку, если есть другой сундук, путь до которого потребует меньше сил: он не только жадина, но и лентяй!
Помогите Жадине собрать N сундуков!
Для начала запустите проект. Вы увидите визуализацию лабиринта:
- Выбрать лабиринт можно в меню слева.
- Цифры на красных клетках — это трудность.
Снизу, в строке статуса отображается текущее состояние.
Для того, чтобы сдать задачу, в файле GreedyPathFinder.cs
реализуйте метод FindPathToCompleteGoal
. Он должен возвращать путь передвижения Жадины. Путь не должен содержать исходную позицию — ту из которой Жадина начинает движение. Если подходящего пути не существует, метод должен возвращать пустой список.
Текущее состояние уровня передается в метод в объекте типа State
. При желании вы можете его модифицировать.
Гарантируется, что если рассмотреть множество всех сундуков и добавить в него исходную позицию, то в нём не существует тройки A, B, C, такой, что от А добраться до B так же трудно, как и от A до C. Другими словами, у Жадины всегда есть только один вариант дальнейших действий.
Тесты в классе GreedyPathFinder_Should
должны завершаться успехом. Остальные тесты в проекте предстоит починить в следующих задачах про Жадину.
1 2 3 4 5 6 7 8 9 10 11 |
// Вставьте сюда финальное содержимое файла GreedyPathFinder.cs using System.Collections.Generic; using System.Drawing; using System.Linq; using Greedy.Architecture; using Greedy.Architecture.Drawing; namespace Greedy { public class GreedyPathFinder : IPathFinder { |
Стоимость решения этой задачи всего 100 рублей, купи решения у меня 🙂