Я пытаюсь решить проблему, связанную с графиками в Python. Поскольку у меня проблема с предсказуемым программированием, я не использую другие сторонние пакеты.
Задача представляет собой график в виде квадратной сетки 5 X 5
.
Предполагается, что бот находится в поставленном пользователем положении на сетке. Сетка индексируется в (0,0)
в верхнем левом углу и (4,4)
в правом нижнем углу. Каждая ячейка в сетке представлена любым из следующих трех символов. 'b
(значение ascii 98) указывает текущую позицию ботов,' d
(значение ascii 100) указывает на грязную ячейку, а '-' (значение ascii 45) указывает на чистую ячейку в сетке.
Ниже приведен пример сетки, где бот находится в 0 0
:
b---d
-d--d
--dd-
--d--
----d
Цель состоит в том, чтобы очистить все ячейки в сетке с минимальным количеством шагов. Шаг определяется как задача, в которой либо i) Бот меняет свое положение ii) Бот меняет состояние ячейки (от d до -)
Предположим, что изначально позиция, помеченная как b
, не нуждается в очистке. Боту разрешено перемещать UP, DOWN, LEFT и RIGHT.
Мой подход
Я прочитал пару руководств по графикам и решил смоделировать график как матрицу смежности 25 X 25 с 0, не представляющую путей, и 1 представляющий пути в матрице (поскольку мы можем перемещаться только в 4 направлениях). Затем я решил применить Floyd Warshell к каждому парному алгоритму кратчайшего пути, а затем суммировать значения путей. Но у меня такое чувство, что это не сработает. Я уверен, что проблема заключается в следующем:
i) Минимальное связующее дерево (которое я не могу сделать, поскольку я не могу моделировать и хранить сетку в виде графика).
ii) A * Search (Опять дикая догадка, но та же проблема здесь, я не могу правильно моделировать сетку как график).
Я был бы признателен, если бы вы могли предложить хороший подход при таких проблемах. Кроме того, некоторые подсказки и psuedocode о различных формах проблем на основе графа (или ссылок на них) были бы полезны. Спасибо