Описание проблемы:
Хомяк Хамми нашел здание с семенами. Помогите ему собрать их всех.
Здание организовано в виде матрицы комнат, в некоторых комнатах семена. Оказавшись в здании, Хэмми будет бегать только по прямой, проходя через все здание и собирая все семена на этой линии. Здание имеет много входов, и Хэмми может войти в любой ряд или столбец, если пожелает.
Он хочет собрать все семена в здании с минимальным количеством прогонов.
Вот примерная схема здания:
+---+---+---+---+---+
| * | | * | | |
+---+---+---+---+---+
| * | * | | | |
+---+---+---+---+---+
| * | | | | * |
+---+---+---+---+---+
| | | | * | |
+---+---+---+---+---+
| | | | * | |
+---+---+---+---+---+
В этом здании 25
комнат (5X5
), но только у 8 rooms
есть семена (комнаты, содержащие *
).
Нам нужно найти минимальные пробеги, чтобы собрать все семена.
Мой подход:
Я пытался решить его с некоторыми Greedy Approach
, вот оно:
1) Start with row/column that contains maximum rooms of seeds (For example: column 1 for here).
2) Updating rows/columns (no of rooms that contain seeds).
3) Repeating steps 1 & 2 until all the seeds are collected.
Итак, для этого примера, когда я применяю свой подход,
Он начинается с Column 1
(содержит 3 комнаты),
после обновления следующая будет Column 4
,
Вот ситуация со зданием прямо сейчас,
+--+---+---+--+---+
| | | * | | |
+--+---+---+--+---+
| | * | | | |
+--+---+---+--+---+
| | | | | * |
+--+---+---+--+---+
| | | | | |
+--+---+---+--+---+
| | | | | |
+--+---+---+--+---+
Теперь три комнаты содержат семена и все на разных rows
или columns
, Мне нужно взять все из них, в результате я закончил с 5 runs
, то есть maximum
(, берущий все строки или все столбцы, всегда является ответом на мысль нг про семена вообще ). Без каких-либо расчетов сюда можно добраться. Прогоны, содержащие все строки или столбцы.
Но эту проблему можно решить за 4 прогона.
Я ищу подход / алгоритм для поиска минимальных прогонов ( какие строки и / или столбцы мне нужно запустить).